org.hibernate.NonUniqueObjectException:a different object with the same identifier value was alread

转自: http://blog.csdn.net/zzzz3621/article/details/9776539

看异常提示意思已经很明显了,是说主键不唯一,在事务的最后执行SQL时,session缓存里面有多个(>1)主键一样的对象。

了解过hibernate的都知道它有一个一级缓存,即session级别的缓存,在一个事务的执行过程中可以管理持久化对象,在事务最后执行SQL,可以减少数据库的操作。

报这个异常就得仔细看看你的代码,一定有地方引用的对象已经不同了。

下面就是一个典型的例子:

[java] view plain copy

  1. public void update(Object obj){
  2. fillObject(obj);
  3. session.update(obj);
  4. }
  5. public void fillObject(Object obj){
  6. Object obj2 = session.load(obj.getId());
  7. //DO 设置obj2的属性
  8. //错误的地方
  9. obj = obj2;
  10. }

正确的应该是

[html] view plain copy

  1. public void update(Object obj){
  2. obj = fillObject(obj);
  3. session.update(obj);
  4. }
  5. public Object fillObject(Object obj){
  6. Object obj2 = session.load(obj.getId());
  7. //DO 设置obj2的属性
  8. return obj2;
  9. }

错误的情况:在刚调用fillObject方法的时候obj(fillObject)是1的状态,后面变成了2。但是obj(update)一直是指向obj的,当执行完fillObject后,session已经存放了obj2,再将obj更新到数据库的时候就会出错。

时间: 06-22

org.hibernate.NonUniqueObjectException:a different object with the same identifier value was alread的相关文章

org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session异常解决办法

org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session异常解决办法 为什么还会说已经存在相同的session了呢.然后每次将项目重启后第一次编辑的时候问题不会触发,只有当第二次操作的时候才会出现这个问题. 解决办法:关闭session.好好检查操作完成后有没有关闭会话. org.hibernat

org.hibernate.NonUniqueObjectException: a different object with the same identifier value was alread---------程序报错

今天遇到了这个问题: org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session:-- 找其原因是因为同一个object,如一个person在seession里保存了一份,而增加的别的object,如company的时候,由于做了关联关系,从数据库里又get了一个person,而这个person和s

org.hibernate.TransientObjectException:The given object has a null identifier

1.错误描述 org.hibernate.TransientObjectException:The given object has a null identifier:com.you.model.UserInfo 2.错误原因 3.解决办法

13.org.hibernate.TransientObjectException:The given object has a null identifier:com.you.model.UserInfo

错误原因 在hibernate映射文件给了一个id,并且是自增,但是在修改时未给id赋值 解决办法 在修改的过程中,给id赋值 原文地址:https://www.cnblogs.com/weichenchq/p/8549516.html

关于出现org.hibernate.TransientObjectException: The given object has a null identifier: 错误的解决方法

出现该错误提示,表示的是执行该操作出现了一个javabean实例空指针异常,该错误是处于数据持久层()表现为数据库设计某个值不能为空,或该数据表采用uu-id的方法为唯一表示,但在数据更新的时候(修改.增加)没有将相对应的id值随表单一起提交到后台,从而产生页面所展示错误.解决办法,可通过增加隐藏域的方法将id值传到后台, <input type="hidden" name = "id"  value="${sessionScope.user.id}

hibernate中一种导致a different object with the same identifier value was already associated with the session错误方式及解决方法

先将自己出现错误的全部代码都贴出来: hibernate.cfg.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-con

Hibernate更新数据报错:a different object with the same identifier value was already associated with the session: [com.elec.domain.ElecCommonMsg#297e35035c28c368015c28c3e6780001]

使用hibernate更新数据时,报错 Struts has detected an unhandled exception: Messages: a different object with the same identifier value was already associated with the session: [com.elec.domain.ElecCommonMsg#297e35035c28c368015c28c3e6780001] a different object w

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

错误提示: org.springframework.dao.DuplicateKeyException: a different object with the same identifier value was already associated with the session: [cn.itcast.bos.domain.User#4]; nested exception is org.hibernate.NonUniqueObjectException: a different obj

解决a different object with the same identifier value was already associated with the session错误

20:41:15 今天做一个saveorupdate操作报错: org.springframework.orm.hibernate3.HibernateSystemException: a different object with the same identifier value was already associated with the session: [com.xshcar.carcloud.entity.UboxTbl#1291]; nested exception is org