我正在尝试缓存这样的查询:
TypedQuery<Foo> q = em.createQuery(
"SELECT foo FROM Foo foo " +
"INNER JOIN FETCH Foo.bar "
);
q.setHint("org.hibernate.cacheable", true);
问题是,当命中缓存时FETCH
似乎没有任何影响,即集合Foo.bar没有被初始化。我可以迭代结果列表并手动初始化集合的所有实例,但这会使整个事情比没有首先使用查询缓存更慢。
我使用JBoss AS 6.0 / Hibernate 3.6和Infinispan作为缓存引擎。
奇怪的是,根据我通过JMX控制台获得的缓存统计信息,Foo.bar中的对象似乎被缓存了,但这些对象的缓存没有得到任何命中。