0

我们在 Java 应用程序中使用 Hibernate 和 Spring。我们发现当一个会话更新数据库中的某些内容时,其他会话看不到更新。例如 user1 从数据库中获取账户余额,然后 user2 增加余额,如果 user1 再次获取对象,他在更新之前看到账户余额(似乎会话使用其缓存中的值)但我们想用 new 获取更新后的对象账户余额。用户 1 在与用户 2 会话不同的所有活动中使用一个会话。是否有任何配置强制从数据库中获取更新的对象?或任何其他帮助?

4

2 回答 2

1

这是设计使然(将 Session 视为“工作单元”);会话应该是事务隔离的。这是会话应该短暂存在的众多原因之一。在我看来,您可能正在使用长寿命会话。

但无论如何,您可以强制“其他会话”(在您的情况下为 user1 使用session.refresh( theAccount );. REFRESH 也是一个级联操作,如果您在刷新帐户时也需要刷新依赖状态...

于 2012-06-30T14:26:23.040 回答
0

如果您对所有活动使用单个会话,那么您所看到的将是意料之中的。

会话 1 将加载对象,然后由会话 2 更改。但是,会话 1 仍然打开,对象在会话(第一级)缓存中。您可以使用 then 刷新 Session1session.clear()如果您重新加载对象,您将获得更新的版本。

于 2012-06-30T11:37:30.437 回答