繁体   English   中英

休眠+春季+会话+缓存

[英]Hibernate + Spring + session + cache

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

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

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

如果您对所有活动都使用单个会话,那么您将看到预期的结果。

会话1将加载由会话2更改的对象。但是,会话1仍处于打开状态,该对象位于会话(第一级)缓存中。 您可以使用session.clear()刷新Session1,然后如果重新加载该对象,则将获得更新的版本。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM