Hi
I recently found out about Ebean from a theserverside.com post. After reading the user guide I believe Ebean really is made by people knowledgeable about ORM and databases.
Like you, my needs don't fit in the envelope of JPA. My reasons are different however: All JPA/JDO/Hibernate work in a way that requires any machine running code that uses entities to have direct access to the database (so as for lazy loading to work, etc).
In our company, our software is not web-based but webstarted rich client (Java Swing), which means we cannot afford the luxury of having client code connecting directly to the database like web apps do. We have a layer of indirection for DB access, in which clients make requests to a service of our own, which is the one really performing database access, handling transactions and keeping track of sessions.
Because of it's remote use, this layer of indirection needed to have the proper granularity on its API. JDBC is just too chatty, so JDBC "bridges" (remote JDBC) just didn't cut it. We made it ourselves and thats how we like it. I built our own simple ORM around it, so I've walked a tiny bit of the path you have.
Anyway, after all the background, going forward to my question:
When I tried to add transparent lazy loading, I tried bytecode enhancement, ASM-subclassing, and dynamic proxies. As I remember, bytecode enhancement for field access interception had the limitation (for me) that only the field access within the entity itself was intercepted. Field access from external objects was not intercepted. Hibernate expresses this limitation as "fields have to be private". I'm not fond of the JavaBeans paradigm, and I want protected and public fields to also work safely. I ended up discarding the enhancement approach (along with the transparency of our lazy loading).
In the ebean user guide you are very clear about the details of property/field access, and state that "ORM interception occuring as and how you'd expect", however, I wonder whether you found a solution to the above issue, or rather that was not an issue for you (for example, you want fields to be private, the javabean way).
??how did you do it?