Note that using Query Cache requires a second level cache too because when query result is get from cache (that is a list of identifiers), Hibernate will load objects using cached identifiers from second level.To sum up, and as a conceptual schema, given next query: ???from Country where population > :number???, after first execution, Hibernate caches would contain next fictional values (note that