我正在使用休眠、弹簧、jpa。在工作流程中,我更新了一个实体;但这些更新在其他工作流程中不可用。当我重新启动服务器时,它工作正常。
有没有办法让我更新实体时;我要求休眠将它从它拥有的任何缓存中删除。这样当任何其他工作流需要该对象时,就会进行新的查询?
这听起来像您为同一个应用程序有两个单独的会话,因此有两个一级缓存。第一级缓存是 Hibernate 在会话上下文中为自己使用的缓存。因此,如果您不关闭/清除会话,这将继续增长,可能与其他 1 级缓存(在其他线程或其他 VM 中)发生冲突。很难说是不是这样,因为你没有指定你的环境,但是你不能改变另一个会话的一级缓存。
避免这种情况的最佳解决方案是使用托管 EntityManager(来自您的应用程序服务器)来处理实体。然后是服务器的角色来处理这种情况。但似乎您正在以“弹簧方式”进行操作,因此,您必须手动操作:在使用会话后清除会话,或者在读取/更新数据之前进行刷新。然后,您将需要某种锁定(悲观/乐观),以免丢失可能已从另一个线程更改的信息。