org.hibernate.NonUniqueObjectException: a different object with the same identifier value was ...
2016-01-27 17:22
806 查看
问题:org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated
with the session:……
主键不唯一,在事务的最后执行SQL时,session缓存里面有多个(>1)主键一样的对象。
原因:了解过hibernate的都知道它有一个一级缓存,即session级别的缓存,在一个事务的执行过程中可以管理持久化对象,在事务最后执行SQL,可以减少数据库的操作。
可能的场景:
1、同一个object,如一个person在seession里保存了一份,而增加的别的object,如company的时候,由于做了关联关系,从数据库里又get了一个person,而这个person和seession里的person是同一个,把get出来的person
set 到了company里,像这样,compnay.setPerson(person).在增加company的时候就出现了这个错误。
2、在同一个session内,如果已经有一个对象已经是持久化状态(load进来等),现在构造一个新的PO,和前一个持久化对象拥有相同的持久化标识(identifier),在update的时候,就会抛这个错误。如:
3、。。。。。
解决办法:
1.不要重新new一个对象,使用load的对象对他进行更改值。
例如上面例子直接对user1操作,最后更新user1
2.如果是hibernate3以上,可以使用session.merge()方法
3.把session中同标识的对象移出(session.evict(user1)),使他成为脱管的状态,然后user2就可以update了。
参考http://fatkun.com/2011/04/org-hibernate-nonuniqueobjectexception.html
with the session:……
主键不唯一,在事务的最后执行SQL时,session缓存里面有多个(>1)主键一样的对象。
原因:了解过hibernate的都知道它有一个一级缓存,即session级别的缓存,在一个事务的执行过程中可以管理持久化对象,在事务最后执行SQL,可以减少数据库的操作。
可能的场景:
1、同一个object,如一个person在seession里保存了一份,而增加的别的object,如company的时候,由于做了关联关系,从数据库里又get了一个person,而这个person和seession里的person是同一个,把get出来的person
set 到了company里,像这样,compnay.setPerson(person).在增加company的时候就出现了这个错误。
2、在同一个session内,如果已经有一个对象已经是持久化状态(load进来等),现在构造一个新的PO,和前一个持久化对象拥有相同的持久化标识(identifier),在update的时候,就会抛这个错误。如:
User user1 = session.load(1); User user2 = new User(); user2.setId(1);//此时ID和user1一样 user2.setUsername("lalala"); session.update(user2);//这里会抛出错误
3、。。。。。
解决办法:
1.不要重新new一个对象,使用load的对象对他进行更改值。
例如上面例子直接对user1操作,最后更新user1
2.如果是hibernate3以上,可以使用session.merge()方法
3.把session中同标识的对象移出(session.evict(user1)),使他成为脱管的状态,然后user2就可以update了。
参考http://fatkun.com/2011/04/org-hibernate-nonuniqueobjectexception.html
相关文章推荐
- python object类
- 对 removeObject 的理解
- node之object-assign
- Android小问题:String转换Json,以及org.json.JSONObject与org.json.JSONArray相互添加
- JSONObject 类
- Could not find MessageBodyWriter for response object of type: application/json
- 理解 Objective-C Runtime
- iOS开发系列—Objective-C之Foundation框架
- MockObject
- JavaScript values and Objective-C objects
- Objective-C中的instancetype和id关键字
- object_id()说明
- Java7中如何将Object对象转化为int对象
- Android开发将List转化为JsonArray和JsonObject
- iOS开发笔记--Objective-C实现多继承
- iOS开发笔记--[__NSArrayI addObjectsFromArray:]: unrecognized selector错误
- 简介Objective-C解析XML与JSON数据格式的方法
- OC - SEL类型的使用
- ArcObject10.1降级至10.0
- 百度OCR文字识别企业版 Object-C 识别两种类型 代码示例