I have recently been in a few conversations regarding Transparent Persistence.
Is it possible to have 100% transparent persistence?
Not within Java. There is an impedence mismatch between objects and relational. You don't "delete" an object in Java. You let it go out of scope, or you set it to null, or something else. What would it mean to delete the object?
How would you query for objects? We need some kind of API/QL to do this
Oh man, so we DON'T have transparent persistence. Woe is me. We are doomed
It isn't bad that we don't have fully transparent persistence. I think it is actually a GOOD thing. As soon as you go into the way of data and persistence the rules change, and you may want to do things differently. However, for many of the things that you do, you want to basically be working with objects and have persistence taken care of for you. What we DON'T want to do, is the manual mapping between objects and JDBC/SQL. Or manually working with connections, and statements, and all that garbage :)
So. With JDO (and Hibernate and Cayenne and ...) we have a good level of transparency, but we are allowed to get in there when we need too.
However, maybe we are doing OR mapping all wrong
(NOTE: Google. How about hiring Brian and funding him to do this work?)