You're gonna have to take the SQL hits at least once. However, if you have a 2nd level cache working you can take them
only once:
http://www.hibernate.org/hib_docs/refer ... ance-cache
You'll likely want to setup a query cache as well, so the relations are also cached:
http://www.hibernate.org/hib_docs/refer ... querycache
You're going to have to chose a 2nd level cache provider that is appropriate for your application. Also keep in mind a 2nd level cache is not appropriate if the data in the database is going to be changed by another application.
--gus