Java:Hibernate看不到数据库中的更改

Java:Hibernate看不到数据库中的更改,java,hibernate,flush,Java,Hibernate,Flush,我有两个不同的应用程序共享同一个数据库。问题是,当我让一个应用程序更改数据库中的某些内容时,另一个不会更新 我试图创建一个会话。flush(),但没有成功。唯一的方法是关闭整个会话并重新创建它,当然,这需要很长时间。我还没有测试过这一点,但是会话类有一个清除所有加载实体的方法。这将强制从数据库重新加载。如果我理解正确,这就是您的场景中发生的情况: app1启动一个事务 app2(启动并)提交另一个事务 app1希望能够读取app2所做的更改 如果是这种情况,您需要检查您的数据库 或者,当您想

我有两个不同的应用程序共享同一个数据库。问题是,当我让一个应用程序更改数据库中的某些内容时,另一个不会更新


我试图创建一个
会话。flush()
,但没有成功。唯一的方法是关闭整个会话并重新创建它,当然,这需要很长时间。

我还没有测试过这一点,但是会话类有一个清除所有加载实体的方法。这将强制从数据库重新加载。

如果我理解正确,这就是您的场景中发生的情况:

  • app1启动一个事务
  • app2(启动并)提交另一个事务
  • app1希望能够读取app2所做的更改
如果是这种情况,您需要检查您的数据库


或者,当您想要读取更新的数据时,您当然可以启动一个新事务。查看

简短回答:每次要显示某个对象时,发出一个
会话。刷新(obj)
。它将强制Hibernate转到数据库。另一种解决方案是使用
无状态会话
,它不会缓存任何内容(甚至不是一级缓存),每次需要记录时,都会强制应用程序进入数据库:

当然,如果这太多了,那么你可以考虑使用某种锁定(悲观或乐观):


但实际上,如果两个不同的并发系统使用同一条记录,那么Hibernate本身无法解决任何问题。在系统的体系结构中应该考虑的事情。

对我来说,提交当前事务并在另一个应用程序应用了它的修改之后开始新的事务是有效的。

你好,实际上,一个应用程序打开并创建一个会话,否则调整数据库并退出。对于第一个查询数据库的应用程序,请不要看到该更改。我试过了。清除()。刷新()。。。但是什么都没有。清理会话但看不到数据库中的更改关闭所有会话没有帮助。您确定它在您的情况下有效吗?这在更新的情况下有效,但是如果app2向表中添加了新行,在这种情况下app1只读取缓存的表,并且少了一行,该怎么办。如果你知道答案,请告诉我,我已经找了好几个星期了。