Since business/domain objects should be unaware of their persistence they obviously must not contain code that loads data from a database to initialize themselves.
On the other hand not all of the properties of business object have public setters to aid encapsulation and to avoid setting them to invalid values.
That means that no other class can fully initialize a business object, when it its data is fetched from a database.
Since all of the above are common best practices, there has to be some solution to that problem. So who should be responsible of constructing business objects and filling them with data from the database?
Note: The only option that comes to my mind is adding all the properties to the constructor, which would be highly impractical in my opinion.
There are quite few solutions to this problem. But neither of are "perfect".
I personally don't see any good answer to your question, unless you can manage to do one of the previous solutions automatically. Either by code generation or by having language support. For example, having language support for "builder pattern" would help a lot.