Thanks to a pointer from Charles, I took a good look at Hibernate. This looks fantastic! It’s sufficiently low-level and doesn’t try to do everything, has pluggable implementations for keys, and is able to hook up to all the different services (caching, transactions, JMX, etc.) that persistence needs. I don’t need to have different objects living on the client and server and I can continue to use the current code generation scheme.