Hibernate二级缓存 - 何时可以从二级缓存返回过时的集合成员?

时间:2010-05-28 14:12:35

标签: hibernate second-level-cache

我的一位同事和我一直在讨论何时(如果?)在二级缓存中缓存的集合可以返回陈旧数据(我们正在使用ehcache和hibernate 3.2.4)。

以下是该方案:

  • 父对象P被缓存并且是一个实体。
  • Parent有一个缓存和懒惰的子集合(包)。
  • 子对象C被缓存并且是实体。
  • 我们使用Nonstrict读写作为所有这些的缓存并发策略。
  • 我们的会话工厂是进程范围的,只涉及1个JVM。
  • 假设上面所有缓存的缓存区域足够大,可以轻松地将所有子节点和父节点的所有实例都保存在内存中。

在时间T1:通过执行session.load(p)并迭代子集合来加载父P和子C1 ... CN,以便加载所有C1 ... CN。

在时间T2:另一个会话加载C1并更新C1,改变其部分数据。

在什么情况下我可以调用P.getChildren()。get(0)和陈旧版本的C1(在T1时刻加载的C1的版本)将被返回?

我在想有两个:

  1. 如果我和T1中的操作处于相同的休眠会话中(在这种情况下会返回会话缓存版本)
  2. 使用非严格的读写操作,可能会出现竞争条件,其中T2的更新和加载几乎在同一时间发生,并且负载赢得竞争并从高速缓存中检索过时的对象。 (在这种情况下,我可以改为读写,我会没事的)

0 个答案:

没有答案