org.hibernate.NonUniqueObjectException解决方法
2014-03-19 09:03
453 查看
用hibernate做修改和删除的时候,有时候会遇到org.hibernate.NonUniqueObjectException 异常,a different object with the same identifier value was alreadyassociated with the session可以解释为 有一个具有相同值的不同对象已经与和 session 相关联。
1. Session session= HibernateSessionFactory.getSession();
2.
3. // 加载OID为1L的对象,会被放在session缓存中
4. LoanDetail detail =(LoanDetail)session.get(LoanDetail.class,1L);
5.
6. // new 一个OID也为1L的临时对象
7. LoanDetail newDetail = new LoanDetail(1L);
8. ewDetail.setSubjectId(1000L);
9.
10. // 持久化一个临时对象,试图放在session的缓存中,因OID冲突出现异常
11. session.save(newDetail);
12.
13. // 执行saveOrUpdate同样会出现以上的异常
14. // session.saveOrUpdate(newDetail);
解决方法:
1) 如果用的 hibernate 2,需要在get/load/query到持久化对象,赋上新的属性值,再 save/update/saveOrupdate.
对以上代码就是:不能 new 一个session中已存在OID的对象,直接
detail.setSubjectId(1000L);
session.save(detail);
session.save()一个持久化对象时,会转化成update调用。
2) 使用 hibernate 3 的 merge 方法.session.merge(newDetail)即可,它会在 session缓存中找到持久化对象,把新对象的属性赋过去,再保存原session中的持久化对象。
如果在session或数据库中没有的对象,用merge方法的话,它也能够帮你把记录 insert到表中,相当于 save 方法。
1. Session session= HibernateSessionFactory.getSession();
2.
3. // 加载OID为1L的对象,会被放在session缓存中
4. LoanDetail detail =(LoanDetail)session.get(LoanDetail.class,1L);
5.
6. // new 一个OID也为1L的临时对象
7. LoanDetail newDetail = new LoanDetail(1L);
8. ewDetail.setSubjectId(1000L);
9.
10. // 持久化一个临时对象,试图放在session的缓存中,因OID冲突出现异常
11. session.save(newDetail);
12.
13. // 执行saveOrUpdate同样会出现以上的异常
14. // session.saveOrUpdate(newDetail);
解决方法:
1) 如果用的 hibernate 2,需要在get/load/query到持久化对象,赋上新的属性值,再 save/update/saveOrupdate.
对以上代码就是:不能 new 一个session中已存在OID的对象,直接
detail.setSubjectId(1000L);
session.save(detail);
session.save()一个持久化对象时,会转化成update调用。
2) 使用 hibernate 3 的 merge 方法.session.merge(newDetail)即可,它会在 session缓存中找到持久化对象,把新对象的属性赋过去,再保存原session中的持久化对象。
如果在session或数据库中没有的对象,用merge方法的话,它也能够帮你把记录 insert到表中,相当于 save 方法。
/article/8872929.html
相关文章推荐
- org.hibernate.NonUniqueObjectException异常解决方法
- org.hibernate.NonUniqueObjectException:org.hibernate.NonUniqueObjectException: a different obj异常解决方法
- org.hibernate.NonUniqueObjectException两种解决方法
- org.hibernate.NonUniqueObjectException的原因与解决方法
- org.hibernate.NonUniqueObjectException异常解决方法
- 关于org.hibernate.NonUniqueObjectException出现的一种情况,以及解决方法。
- org.hibernate.NonUniqueObjectException异常解决方法(1)
- org.hibernate.NonUniqueObjectException: A different object with the same identifier解决方法
- org.hibernate.NonUniqueObjectException的原因与解决方法
- org.hibernate.NonUniqueObjectException异常解决方法(2)
- 出现 org.hibernate.NonUniqueObjectException 错误的解决方法
- org.hibernate.NonUniqueObjectException两种解决方法
- org.hibernate.NonUniqueObjectException 个人的解决
- Hibernate Session篇--org.hibernate.NonUniqueObjectException分析及解决
- org.hibernate.NonUniqueObjectException 个人的解决办法
- Hibernate 保存对象出现 org.hibernate.NonUniqueObjectException 及解决
- org.hibernate.NonUniqueObjectException报错后,从配置文件中的hibernate-inverse与cascade 得到解决问题
- org.hibernate.NonUniqueObjectException 个人的解决
- org.hibernate.NonUniqueObjectException
- org.hibernate.NonUniqueObjectException: a different object with the same identifier value was alread