这是我的情景:
我有一个跨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。
答案 0 :(得分:0)
对于你指定的这个问题,即“问题是,每当A实体在T2上合并时,hibernate会对B的集合进行查询,因为他无法在二级缓存中找到它。”
你必须检查hibernate的inverse property
。只需设置inverse=true
值,它就不会再次获取B的集合。
您可以在link找到反向属性的详细说明。
我希望这有助于您理解与反向属性相关的其他问题。