这是我的场景:
我有一个跨越 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。