我需要一些关于Hibernate合并方法的说明。它到底是如何工作的。当我有一个分离的实体时,我想让它被重新连接,Hibernate是只在当前会话中查看同一实体,还是在所有的Hibernate会话中查看?
有没有办法在晶体管实体上使用合并?
发布于 2011-06-02 05:07:38
当您可能在当前内存中同时有多个对象实例,并且您希望Hibernate保存对对象的任何实例所做的任何和所有更改时,可以使用Hibernate的merge。例如,当您在验证过程中通过两种不同的方式加载对象时,就会发生这种情况。
一个可能导致混淆的问题是应用程序会话和Hibernate会话之间的差异。在应用程序会话期间,可以打开和关闭多个Hibernate会话。
如果您在第一个Hibernate会话中加载对象实例,然后关闭该会话,则该实例将变为分离状态。如果您打开一个新会话,然后加载相同的对象(相同的ID),Hibernate将构造一个新实例,如果您尝试在第一个会话中获得的对象上使用saveOrUpdate,Hibernate将抛出一个NonUniqueObjectException。
因此,虽然当前的Hibernate会话只关心它自己,但它的基础结构的一部分是要知道在较大的应用程序会话中存在哪些映射为Hibernate实体的对象,因此应该在保存或合并等操作中考虑这些对象。
Merge是一种告诉Hibernate的方法,“我想让你假设我对这个Hibernate实体所做的任何更改都应该保存,即使我将它们保存到对象的另一个实例,而不是我要求你保存的那一次。”SaveOrUpdate是一种告诉Hibernate更加保守并抛出异常的方法。
在我的博客中有更多关于Hibernate的saveOrUpdate和merge in this article之间差异的细节。
https://stackoverflow.com/questions/6206856
复制相似问题