Large database projects often become bloated because the database design is separate from the application design causing additional business rules to be created to deal with incomplete database design, incorrect field types, or missing relationships.
Good object-oriented design is a direct reflection of good database design, where they diverge is in cases where data is sometimes rolled up into parent records in order to reduce transaction counts or improve performance.
With good caching algorithms database design compromises can be kept to an absolute minimum. By using code generation to generate classes from the database, all fields can be generated in the application with the identical type and precision as the database.
Contrast that with conventional database design where the application is uncoupled from the database creates the dreaded scenario of a database change that will now ripple through a large code-base, extending the time to incorporate the changes.
The swing toolset has an object/database mapping tool-set and the implementation used in Grails comes closest to mapping all of the database meta data to the entity object.