Hibernate在新实体上的二级集合缓存

时间:2012-10-22 06:51:25

标签: hibernate caching collections ehcache

这是我的情景:

我有一个跨2个春季交易的过程(P =必需,I =默认)。

在T1上,我实例化了一个实体A,它有一个空的B集合。

A和B实体以及oneToMany关系都标有@Cache注释。我尝试过CacheConcurrencyStrategy.READ_WRITE和CacheConcurrencyStrategy.NONSTRICT_READ_WRITE。

我正在使用ehcache作为缓存提供程序。

在T1上,我合并了一个实体。

在T2上,我再次合并它。

问题是,每当A实体在T2上合并时,hibernate都会对B的集合进行查询,因为他无法在二级缓存中找到它。

一旦加载了集合,就会使用缓存(如果我在新事务T3上执行相同的合并,它将从缓存中获取集合)。

如何避免执行此查询? I.E:在加载之前如何让hibernate二级缓存新创建的集合?

另外,我考虑使用第一级缓存,以某种方式设法使一个hibernate会话成为线程限制,跨越T1和T2(但我不确定它是否适用于集合......)这个程序可以接受吗?如何实现这个目标?

TKS。

1 个答案:

答案 0 :(得分:0)

对于你指定的这个问题,即“问题是,每当A实体在T2上合并时,hibernate会对B的集合进行查询,因为他无法在二级缓存中找到它。” 你必须检查hibernate的inverse property。只需设置inverse=true值,它就不会再次获取B的集合。 您可以在link找到反向属性的详细说明。

我希望这有助于您理解与反向属性相关的其他问题。