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