You are correct, and if you look at the hibernate docs, you'll learn a lot about how the cache behaves. In your case, the cache is not the issue - lazy init of objects is. Lazy init is the default behavior of Hibernate and you should familiarize with it asap in order to really KNOW what needs to be lazy-initialized and what should not.
For testing purposes only, you can tag all your classes with "lazy=false" and all collections with lazy="false" - just to see that this time, the query happens immediately, but I would not advise to leave it like this for production environments:
Code:
<class ... lazy="false">
...
<map|list|set| .... lazy=false>
</class>
(p.s. please rate if this was helpful :-) ... )