I have nearly the exact problem and used hibernate. We ran into a lot of problems late in the project because the view basically forced the entire graph into memory even with using lazy fetch types. These tools were good early on though because we could quickly get a DB tier in place that gave us something (huzzah agile). Only when we were going for performance improvements did we realize we needed to write a more intelligent persistence layer.
Is it possible to do some pre-processing on your data? If the problem is similar there is a lot of value in trying to transform the data into a intermediate form that is closer to your view than the original domain and store this in the DB as well. You can always link back to the original source using the lazy fetch type.
Basically we used a 4-tier system: Domain DB, ViewModel-DB hybrid (pre-processed layer), ViewModel, View
The advantage of this pre-processing step (especially with realtime UI), is that you can page data into a ViewModel and render it nicely. So much of performance in a realtime app is slight of hand, just stay responsive and show them something nice while they wait. In our case we could show 3d box regions of data that was paging in, data that was linked to loading data could show a visual indicator as well. The ViewModel-DB hybrid could also do nice things like LRU queues that fit our domain data. The biggest advantage though was to remove the direct linking. Nodes had something similar to URL to their linked data. When rendering we could render the link, or render that there is a link we just are paging it in at the moment.
Persistence at the DB level was JPA (Hibernate) to start, but in the end the tables it generated for our inheritance structure were terrible and hard to maintain. In the end we wanted more control over tables than JPA allowed (or at least easily allowed). This was a tough decision as JPA did make a lot of the DB layer easy. Since JPA kept things nice and POJO it didn't require mucking around with our datatypes. So this was nice.
I hope there is something you can pull out of this meandering answer, and good luck :)