`
lilerwei
  • 浏览: 52594 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

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

阅读更多

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

 

 

public boolean update(BusLineinfo busLineinfo) {
		
		boolean isUpdate = false;
		
		try{
			BusLineinfo line = busLineinfoDao.queryByLineNameAndfromorto(busLineinfo.getLinename(), busLineinfo.getFromorto());//A、得出来的line是持久化的对象
			if(line==null || line.getLineid().equals(busLineinfo.getLineid())){
				isUpdate = busLineinfoDao.update(busLineinfo);//B、调用的是下面的update方法,得出来的也是持久化的对象
				isUpdate = true;
			}else{
				isUpdate = false;
			}
		}catch(RuntimeException re){
			log.error("BusLineinfoServiceImpl update is faield", re);
			re.printStackTrace();
		}
		return isUpdate;
	}
 

 

public boolean update(BusLineinfo busLineinfo) {
		try {
			getHibernateTemplate().update(busLineinfo);//C、想要改变这个错误,可以将其中的update方法改为merge方法
			return true;
		} catch (RuntimeException re) {
			log.error("BusLineinfoDaoImpl update is failed", re);
			re.printStackTrace();
		}
		return false;
	}

 分析:按照以上的写法就会抛出上面所说的错误,我们回过头来分析一下,出现这个问题的原因。

          首先,我们用的是spring+hibernate+struts2,我们的事务是加在了第一个方法上。第一个方法,在A和B两个地方得出了两个持久化对象,并且这两个持久化的对象的主键是相同的。

          另外,持久化的对象都会放到缓存里面,现在就出现了一个缓存中出现了两个主键相同的对象(这是不被允许的,就好比数据库中不允许主键相同是一样的)。

解法方法:将第二个方法的update方法改为merge方法。

附merge说明:

 

merge(): 他说的就是如果没有该条记录,则会被创建; 如果有该条记录,但内容有变,则会被修改; 相当于save or update. merge 和saveOrUpdate不一样,当session中某持久化对象有id相同的两个纪录时,必须用merge,merge会在保存之前来合并记录,不然会报错。合并记录后的动作和 saveOrUpdate一样。

分享到:
评论

相关推荐

    hibernate常见异常

    a different object with the same identifier value was already associated with the session 是一种常见的异常,通常是由于在 Hibernate 中同一个 session 里面有了两个相同标识但是是不同实体所致。解决方案有...

    hibernate常见问题及处理.doc

    5. `a different object with the same identifier value was already associated with the session` 这个异常表明在同一个Hibernate Session中存在两个具有相同标识但实际是不同对象的情况。处理方法有: - 使用`...

    计算机网络第六版答案

    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 ...

    The Digital Object Identifier initiative: metadata implications

    数字对象标识符(Digital Object Identifier,简称DOI)是一种持久性标识符,用于唯一地标识数字资源,如学术文章、数据集等。DOI系统由国际DOI基金会管理,并在出版界广泛采用。随着数字资源的增加以及对资源描述的...

    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 ...

    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 ...

    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 ...

    微软内部资料-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 ...

    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 ...

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

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

    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...

    NTFS Documentation

    Stores a unique identifier for the file, allowing for the identification of files across different volumes. ##### Attribute - $SECURITY_DESCRIPTOR (0x50) Holds security-related information, such as ...

    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 ...

Global site tag (gtag.js) - Google Analytics