Hibernate 了解JBossCache-缓存具有许多关联的对象图

Hibernate 了解JBossCache-缓存具有许多关联的对象图,hibernate,second-level-cache,jboss-cache,Hibernate,Second Level Cache,Jboss Cache,我正在尝试使用JBossCache作为JPA/Hibernate二级缓存提供程序来缓存重复调用的查询。查询返回特定类型的实体,我们称之为FooType FooType如下所示: @Entity(name = FooType) @Cache(usage = CacheConcurrencyStrategy.TRANSACTIONAL) public class FooType { protected BarType barType; @ManyToOne(targetEntity =

我正在尝试使用JBossCache作为JPA/Hibernate二级缓存提供程序来缓存重复调用的查询。查询返回特定类型的实体,我们称之为FooType

FooType如下所示:

@Entity(name = FooType)
@Cache(usage = CacheConcurrencyStrategy.TRANSACTIONAL)
public class FooType {
   protected BarType barType;

   @ManyToOne(targetEntity = BarType.class, cascade = {
       CascadeType.ALL
   })
   BarType getBarType() {
       return barType;
   }
}
因此,Footype有多对一的关联。现在,当我调用查询时,似乎只有很小的一部分放在缓存中。我认为原因是我没有标记与@Cache标记的关联。我说得对吗

但真正的问题是:

BarType也有一些关联,这些返回的对象也提供了关联等等,构建了一个大的关联图。现在,我需要吗

a) 注释所有这些类和

b) 还注释了关联


为了缓存整个查询?

所有要缓存的实体/集合必须具有@Cache,以便可以缓存它们。查询缓存的工作原理稍有不同,要获得缓存的结果,需要使查询对象可缓存

顺便说一句,像往常一样,如果它真的有意义,请缓存


所有要缓存的实体/集合必须具有@Cache,以便缓存它们。查询缓存的工作原理稍有不同,要获得缓存的结果,需要使查询对象可缓存

顺便说一句,像往常一样,如果它真的有意义,请缓存


因此,如果我使查询对象可缓存,我不需要使它返回的实体可缓存?问题是,初始查询会被缓存,但Hibernate也会在初始查询之后创建一个巨大的附加查询集。这些不会被缓存。查询需要可缓存,实体需要标记为@Cache。我不知道这些额外的查询是从哪里来的。它们是你创造的吗?还是通过冬眠?如果它们是内部的,你就不能马上对此做任何事情。因此,如果我使查询对象可缓存,我就不需要使它返回的实体可缓存?问题是,初始查询会被缓存,但Hibernate也会在初始查询之后创建大量的附加查询。这些不会被缓存。查询需要可缓存,实体需要标记为@Cache。我不知道这些额外的查询是从哪里来的。它们是你创造的吗?还是通过冬眠?如果它们是内部的,你就什么也做不了。