Querying objects with XPath
Maintaining complete object hierarchy in-memory
The alternative would be to load all objects into memory at startup or first use. This way, using stateful session beans, each client could make requests on references to real objects directly, with these references placed in their state on the application layer.
The big "how" in this scenario is search. How to do an effective complex search in large object hierarchies? If I have 4000 contacts of different types with sub-contacts and aggregated objects etc. it would probably take ages to do what a simple SQL SELECT could do in seconds.
Maybe you should give a look at XPath for objects. An example of this for Java is JXPath.
Note: I should have a prototype for .NET any time soon.