0

这是我的场景:

我有一个跨越 2 个 spring 事务的流程(P=Required,I=Default)。

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

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

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

在 T1 上,我合并了 A 实体。

在 T2 上,我再次合并它。

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

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

如何避免执行此查询?IE:如何在加载之前使新创建的集合休眠二级缓存?

另外,我考虑过使用第一级缓存,以某种方式设法使一个休眠会话成为线程绑定的,跨 T1 和 T2(但我不确定它是否也适用于集合......)它是否可以接受程序?如何做到这一点?

TKS。

4

1 回答 1

0

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

我希望这将帮助您理解与逆属性相关的其他问题。

于 2012-10-23T10:44:02.097 回答