分离的实体如何成为hibernate中的持久对象?

时间:2015-06-11 17:22:11

标签: java hibernate session jdbc persistence

我读到了关于瞬态,持久和分离的内容。似乎大部分内容都是直截了当的理解。我无法克服的是,当我们使用session.close()时,已经在第一级缓存中的实体对象被删除或清除,在我看来,没有机会将实体或对象带回或放回持久的状态。但是后来我看到或者从不同的来源读取的是,分离的实体仍然可以在以后重新连接到新的会话。在关闭会话后清除第一级缓存是怎么可能的?

1 个答案:

答案 0 :(得分:1)

我想向您保证,这并不复杂。简单......

  • 我们可以在一个session (会话实例)中加载实体 - 并关闭此类session,同时保持对已加载的的引用实体entity关闭后,session将被分离
  • 我们可以打开新的session (不同的会话实例) - 然后重新附加实体。然后我们能够坚持同时进行的更改。

那就是它。来自doc的更多细节:

11.6. Modifying detached objects

  

许多应用程序需要在一个事务中检索对象,将其发送到UI层进行操作,然后将更改保存在新事务中。在高并发环境中使用这种方法的应用程序通常使用版本化数据来确保隔离" long"工作单位。

     

...

     

如果您确定会话不包含具有相同标识符的已持久实例,请使用update()。如果要在不考虑会话状态的情况下随时合并修改,请使用merge()

所以,这里的重点是......加载session实体不是短暂的。它已经存在了。一旦会话结束,它就会变得分离。但是可以在以后再次参加另一场会议