3

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

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

4

1 回答 1

2

它可以通过应用@Cache到集合属性来修复(当然,目标实体也应该是可缓存的),参见21.2.1。缓存映射

于 2011-04-28T10:34:46.193 回答