Hibernate EntityManager + Query Cache - “join fetch”无法正常工作

时间:2011-04-28 10:00:38

标签: hibernate jpa join fetch query-cache

我正在尝试缓存这样的查询:

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中的对象似乎被缓存了,但这些对象的缓存没有得到任何命中。

1 个答案:

答案 0 :(得分:2)

可以通过将@Cache应用于集合属性来修复(当然,目标实体也应该可以缓存),请参阅21.2.1. Cache mappings