Hmm,
I think the solution to your problem would be to externalize the objects from Hibernate for use in memory by your Swing app. Then use mergeOrUpdate to put them back periodically.
When a Session is open you should "POJOize" your objects into the graph that you need. Whenever updates are made to these objects, you can then periodically open a session and use mergeOrUpdate to flush them to the DB.
We use exactly this pattern in
Examinator - a reference application written by Terracotta. In Examinator we take some objects out of Hibernate for extended periods of time (much like your MVC in Swing). The only difference between our usage and yours is the fact that our app - Examinator - runs in a traditional 3-tier app. The interesting thing is that when you cut out the client and give the web application layer state it looks a lot like your 2-tier app.
And that's what we did - because holding long lived objects in memory is a lot lot lot faster than reading/writing them from/to the DB all the time.
(note that "POJOize" is term we made up - there are a few methods of stripping the Hibernate gunk from the objects it returns - we wrote a very very small library that does this in Examinator)