如何从Hibernate缓存中删除实体

时间:2012-07-08 07:36:30

标签: spring hibernate jpa

我正在使用hibernate,spring,jpa。 在工作流程中,我更新实体;但这些更新在其他工作流程中不可用。当我重新启动服务器时它工作正常。

有没有办法让我更新实体时;我要求hibernate从它拥有的任何缓存中删除它。那么当任何其他工作流需要该对象时,会产生一个新的查询?

1 个答案:

答案 0 :(得分:1)

这听起来像你有两个单独的会话同一个应用程序,因此,有两个一级缓存。第一级缓存是Hibernate在会话上下文中使用的缓存。因此,如果您不关闭/清除会话,这将继续增长,可能与其他第一级缓存(在其他线程或其他VM中)冲突。很难说是否是这种情况,因为您没有指定您的环境,但您无法更改另一个会话的第一级缓存。

避免这种情况的最佳解决方案是使用托管的EntityManager(来自您的应用程序服务器)来处理实体。然后是服务器处理这种情况的角色。但似乎你正在以“弹簧方式”进行操作,因此,您必须手动完成:在使用后清除会话,或者在读取/更新数据之前进行刷新。然后,您需要某种锁定(悲观/乐观),以免丢失可能已从另一个线程更改的信息。