在做hibernate修改和删除的时候,可能会遇到 org.hibernate.NonUniqueObjectException 异常,a different object with the same identifier value was already associated with the session 这个问题的出现 主要是当前状态下有一个具有相同值的不同对象已经与和 session 相关联了。

就好比:

Session session = HibernateSessionFactory.getSession();
// 加载Student 的对象,会被放在session缓存中
Student s = (Student )session.get(Student .class,1);

//然后你在需求时没有注意session中存在了s这么一个对象,而你又继续

Student s1= new Student(1);

s1.setStatus(“22”);

// 此后你打算保存或者更新持久化一个临时对象,试图放在session的缓存中,因id冲突出现异常
session.save(s1);

// 执行saveOrUpdate同样会出现以上的异常
session.saveOrUpdate(s1);

解决方法是:

你不需要再new一个Student了,你只需要先从session中取出缓存的Student对象,

然后

根据你的需求分别设值

Student s = (Student )session.get(Student .class,1);或者其他方式取得对象。。。

s.setStatus(“22”);

session.save(s);//session.update(s);其实save中数据库存在它会自动转为update

总之,就是需要在get/load/query到持久化对象,赋上新的属性值,再 save/update/saveOrupdate.

另外的一种方法是:

使用 hibernate 3 的 merge 方法. session.merge(s1)即可,它会在 session 缓存中找到持久化对象,把新对象的属性赋过去,再保存原session中的持久化对象。
如果在session或数据库中没有的对象,用merge方法的话,它也能够帮你把记录 insert 到表中,相当于 save 方法。

org.hibernate.NonUniqueObjectException 异常处理相关推荐

  1. org.hibernate.NonUniqueObjectException:

    为什么80%的码农都做不了架构师?>>>    异常描述 org.hibernate.NonUniqueObjectException: A different object wit ...

  2. Hibernate学习之hibernate状态

    hibernate有三种状态,transient(瞬时状态),persistent(持久化状态)以及detached(离线状态),瞬时状态就是刚new出来一个对象,还没有被保存到数据库中,持久化状态就 ...

  3. Hibernate三种状态的区分,以及save,update,saveOrUpdate,merge等的使用

    Hibernate的对象有3种状态,分别为:瞬时态(Transient). 持久态(Persistent).脱管态(Detached).处于持久态的对象也称为PO(Persistence Object ...

  4. Hibernate开发中常见错误总结

    org.hibernate.MappingException: Unknown entity: cn.itcast.hibernate717.helloworld.Person hibernate框架 ...

  5. hibernate数据的三种存在状态(只与事务有关)

    Hibernate的对象有3种状态,分别为: <1>瞬时态 (Transient) <2>持久态(Persistent) <3>脱管态(Detached)  处于持 ...

  6. hibernate实体的几种状态

    http://fojian.iteye.com/blog/420141 hibernate实体的几种状态: 实体的生命周期中,实体主要经过瞬时(Transient),托管(Attatched或Mana ...

  7. hibernate merge saveorupdate save lock

    http://anderslee.blog.51cto.com/784291/170058 Hibernate三种状态的区分,以及save,update,saveOrUpdate,merge等的使用 ...

  8. hibernate在分层架构中修改数据(update)时遇到的问题!!

    开发软件:Myeclipse 10.0 数据库:oracle 开发人员:1111 问题简单描述:修改数据的时候不能正常修改,要么修改不成功,要么报错 nice,下面就来看看怎么解决这个bug的. 首先 ...

  9. hibernate中PO对象的三种状态分析以及session中的一些方法的区别

    hibernate的状态 hibernate的各种保存方式的区(save,persist,update,saveOrUpdte,merge,flush,lock)及 对象的三种状态 hibernate ...

最新文章

  1. 轮询 长轮询 websocket
  2. Javascript history pushState onpopstate方法做AJAX SEO
  3. python中面向对象编程简称为_Python基础-面向对象编程
  4. 网管心得:优化网络性能给局域网提速[好文章]
  5. 实例4:python
  6. Python部分知识点
  7. 帝国CMS标签 总结2
  8. java 蓝桥杯算法训练 秘密行动
  9. C++语言类的详解和示例
  10. C语言小知识---递归函数的使用
  11. 语音识别入门:从菜鸟到大佬
  12. 最新发布!《统计学习方法》第二版无监督学习视频课上线了!
  13. 阿里云产品专家孟威:SLS 全景体验
  14. C++题解:百钱买百鸡数量
  15. 写给2018考研的你
  16. NTP服务器配置(CentOS环境)
  17. 为酒店设计一套计算机网络管理系统,酒店管理系统设计与方案.doc
  18. 项目发布到Tomcat后,网页图片不显示
  19. python计算等额本金_等额本金还款计算公式
  20. 《正在爆发的互联网革命》作者个人出资10000美金,面向全球征召六度分割理论实验对象!...

热门文章

  1. 使用U盘安装win7系统,遇到“无法定位现有系统分区”问题
  2. M4i—下一代高速数据采集、数字化仪平台
  3. Java基础02 方法与数据成员
  4. linux文件目录分析之/etc目录
  5. 设计模式-结构型-桥接
  6. 吴恩达深度学习课程deeplearning.ai课程作业:Class 1 Week 3 assignment3
  7. linux connect自动重连,Linux系统中使用sshfs挂载远程主机的目录到本地系
  8. Tensorflow中placeholder传入值与feed_dict喂食器的联系与用法
  9. React上下文-Context
  10. python学习------文件处理