`

a different object with the same identifier value was already associated with th

阅读更多

问题

今天做hibernate开发出了一个这样的问题

a different object with the same identifier value was already associated with the session

 

明白几个session对象

首先我们要知道原因是在hibernate中同一个session里面有连个相同的标识,但是他们两个确实不同的实体,在这时运行saveOrUpdate操作的时候就报了这个错误

为什么会报这个错呢,首先我们要明白session的几个使用

save()或 saveOrUpdate()是将瞬时对象与数据库相关联,并将数据对应的插入数据库中,此时该瞬时对象转变成持久化对象。

delete()方法将持久对象就变成瞬时对象, 因数据库中的对应数据已被删除,该对象不再与数据库的记录关联。

close()或clear()、evict()之后,持久对象变成脱管对象,此时持久对象会变成脱管对象,此时该对象虽然具有 数据库识别值,但它已不在HIbernate持久层的管理之下。

merge():但当我们使用merge的时候,把处理自由态的持久对象A的属性copy到session当中处于持久态的持久的属性中,执行完成后原来是持久状态还是持久态,而我们提供的A还是自由态

 

了解我的流程:

我的程序的流程是这样的,首先A表示主表,B表示从表,A和B是一对多的关系

由于业务的需求,我先对A表执行的添加(或者修改--------[在执行修改的时候先查询A对象的操作,那么此时B对象也会通过级联查询出来]),通过添加后返回的对象,对B表中存在的此对象进行删除操作,最后对B表执行添加然后事务才开始执行commit的方法

如果我在执行删除之后没有执行添加是不会报任何错误的,为何执行了saveOrUpdate之后就出错了呢

首先我们要明白这三个操作时在事务中执行的

(1)delete()执行之后其实数据和session中的对象都存在,因为没有执行事务的commit方法

(2)在saveOrUpdate()中执行对象添加的时候,在session的对象中已经存在了当前对象的相同标识的对象,那么对象无法保存进去肯定会出错的

 

解决办法:

(1)在delete()之后执行evcit()方法,将此对象变成脱管状态,那么次对象就不会在session中了,再次执行saveOrUpdate()的时候就不会存在相同的标识了,自然也就不会报错了!当然有人肯定会问,如果我想在saveOrUpdate()的之前再次使用那个脱管对象呢,那么我们只需要将此对象再次放到session中就可以,比如执行get(),load()方法,不过应该没有这么变态的业务逻辑吧!

(2)当然除了使用evcit()方法将delete()中的对象变成脱管对象外,我们还可以在saveOrUpdate()中做操作,那么就是用merge()方法,由A的说我们,我们就明白了,即使在delete()的时候我们没有执行evcit(),那么在执行merge()方法的时候,即使session中存在相同标志的持久对象,merge()会用当前对象替换掉session中的持久对象,一切就ok了

 

分享到:
评论
1 楼 rosydawn 2015-06-12  
   

相关推荐

    The Digital Object Identifier initiative: metadata implications

    The Digital Object Identifier initiative: metadata implications Context/status information The purpose of this document is to generate a DOI Foundation consensus paper on metadata, as a companion ...

    NewSID(光学习一下代码就可以了,没看清楚介绍别运行)

    When the SID is found in a value it is replaced with the new computer SID, and when the SID is found in a name, the key and its subkeys are copied to a new subkey that has the same name except with ...

    计算机网络第六版答案

    In these systems, packets are transmitted over the same wireless infrastructure used for cellular telephony, with the base station thus being managed by a telecommunications provider. This provides ...

    S7A驱动720版本

    - When the signal conditioning function "S&M" was used for a byte value, the driver wrote wrong values to the PLC. Build 223 : New Functions: - The number of supported NetLinks has been ...

    FlexGraphics_V_1.79_D4-XE10.2_Downloadly.ir

    - FIX: The value of some string flex-properties that began with a parenthese or curly bracket had no apostrophe at the end; that caused an error when reading. (fixed TPropList.SavePropValue for the ...

    微软内部资料-SQL性能优化3

    Another type of table lock is a schema stability lock (Sch-S) and is compatible with all table locks except the schema modification lock (Sch-M). The schema modification lock (Sch-M) is incompatible ...

    微软内部资料-SQL性能优化5

    Each index row in node pages contains an index key (or set of keys for a composite index) and a pointer to a page at the next level for which the first key value is the same as the key value in the ...

    developing android application with adobe air.part3.rar

    EXIF Data and the Map Object The speed Property Conclusion Chapter 11 : Microphone and Audio The Microphone Audio Assets Working with Sounds ID3 Tags Modifying Sound Raw Data and the Sound Spectrum ...

    servlet2.4doc

    Adds a response header with the given name and value. addIntHeader(String, int) - Method in class javax.servlet.http.HttpServletResponseWrapper The default behavior of this method is to call ...

    VclZip pro v3.10.1

    This was due to a problem where it would be freed automatically if there was a problem with the ArchiveStream when trying to open it as a zip file (possibly corrupt). Best practice is that ...

    高性能消息传输机制Aeron.zip

    two and must be the same length on both ends.Term ID: A unique identifier for a Term within a Stream. Starts randomly. Must increase monotonically. Can wrap around. Can not go back to a wrapped ...

    Oracle数据库表名支持的最大长度是多少

    本文介绍Oralce数据库中,表名可以使用的最大长度。这个长度也是Oracle...*Cause: An identifier with more than 30 characters was specified. *Action: Specify at most 30 characters. 从这个错误提示可以看出

    windows程序设计

    created with the default settings in Microsoft Visual C++ 6 with one major exception: aside from other compiler and linker flags, the executable in the DEBUG directory has been compiled with the ...

    Devart LinqConnect 3.1

    The "Identifier Case Sensitive" check box, which enables case-sensitive processing of database object identifier names, is added to MySQL Server Options The documentation generation for Enum members ...

    A Novel RFID Authentication Protocol with Ownership Transfer.doc

    A Novel RFID Authentication Protocol with Ownership Transfer Han Jia1, Jun Wen2 School of Computer Science and Technology, University of Electronic Science and Technology of China,Chengdu, China 1...

    CAN Specification Version 2.0

    make use of the CAN implementations that are already available on the market, or of new controllers that implement both formats. In order to distinguish standard and extended format the first reserved...

    libtomcrypt-1.17

    LibTomCrypt is a fairly comprehensive, modular and portable cryptographic toolkit that provides developers with a vast array of well known published block ciphers, one-way hash functions, chaining ...

    Fsharp Succinctly(Syncfusion,2012)

    In the simplest terms, once a value is assigned to an identifier it never changes, functions do not alter parameter values, and the results that functions return are completely new values. In typical...

    Design and Implementation Voip Service On Open IMS and Asterisk Servers

    telephone (FXS) with a arrival call each servers is 30 call/sec, the maximum PDD value is 493.656 ms. Open IMS is able to serve maximum 30 call/s with computer processor 1.55 GHz, while the Asterisk ...

    a_byte_of_python

    it was written by Swaroop C H.its name is "a byte of python". Table of Contents Preface Who This Book Is For History Lesson Status of the book Official Website License Terms Using the ...

Global site tag (gtag.js) - Google Analytics