org.hibernate.NonUniqueObjectException 异常处理
在做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 异常处理相关推荐
- org.hibernate.NonUniqueObjectException:
为什么80%的码农都做不了架构师?>>> 异常描述 org.hibernate.NonUniqueObjectException: A different object wit ...
- Hibernate学习之hibernate状态
hibernate有三种状态,transient(瞬时状态),persistent(持久化状态)以及detached(离线状态),瞬时状态就是刚new出来一个对象,还没有被保存到数据库中,持久化状态就 ...
- Hibernate三种状态的区分,以及save,update,saveOrUpdate,merge等的使用
Hibernate的对象有3种状态,分别为:瞬时态(Transient). 持久态(Persistent).脱管态(Detached).处于持久态的对象也称为PO(Persistence Object ...
- Hibernate开发中常见错误总结
org.hibernate.MappingException: Unknown entity: cn.itcast.hibernate717.helloworld.Person hibernate框架 ...
- hibernate数据的三种存在状态(只与事务有关)
Hibernate的对象有3种状态,分别为: <1>瞬时态 (Transient) <2>持久态(Persistent) <3>脱管态(Detached) 处于持 ...
- hibernate实体的几种状态
http://fojian.iteye.com/blog/420141 hibernate实体的几种状态: 实体的生命周期中,实体主要经过瞬时(Transient),托管(Attatched或Mana ...
- hibernate merge saveorupdate save lock
http://anderslee.blog.51cto.com/784291/170058 Hibernate三种状态的区分,以及save,update,saveOrUpdate,merge等的使用 ...
- hibernate在分层架构中修改数据(update)时遇到的问题!!
开发软件:Myeclipse 10.0 数据库:oracle 开发人员:1111 问题简单描述:修改数据的时候不能正常修改,要么修改不成功,要么报错 nice,下面就来看看怎么解决这个bug的. 首先 ...
- hibernate中PO对象的三种状态分析以及session中的一些方法的区别
hibernate的状态 hibernate的各种保存方式的区(save,persist,update,saveOrUpdte,merge,flush,lock)及 对象的三种状态 hibernate ...
最新文章
- 轮询 长轮询 websocket
- Javascript history pushState onpopstate方法做AJAX SEO
- python中面向对象编程简称为_Python基础-面向对象编程
- 网管心得:优化网络性能给局域网提速[好文章]
- 实例4:python
- Python部分知识点
- 帝国CMS标签 总结2
- java 蓝桥杯算法训练 秘密行动
- C++语言类的详解和示例
- C语言小知识---递归函数的使用
- 语音识别入门:从菜鸟到大佬
- 最新发布!《统计学习方法》第二版无监督学习视频课上线了!
- 阿里云产品专家孟威:SLS 全景体验
- C++题解:百钱买百鸡数量
- 写给2018考研的你
- NTP服务器配置(CentOS环境)
- 为酒店设计一套计算机网络管理系统,酒店管理系统设计与方案.doc
- 项目发布到Tomcat后,网页图片不显示
- python计算等额本金_等额本金还款计算公式
- 《正在爆发的互联网革命》作者个人出资10000美金,面向全球征召六度分割理论实验对象!...
热门文章
- 使用U盘安装win7系统,遇到“无法定位现有系统分区”问题
- M4i—下一代高速数据采集、数字化仪平台
- Java基础02 方法与数据成员
- linux文件目录分析之/etc目录
- 设计模式-结构型-桥接
- 吴恩达深度学习课程deeplearning.ai课程作业:Class 1 Week 3 assignment3
- linux connect自动重连,Linux系统中使用sshfs挂载远程主机的目录到本地系
- Tensorflow中placeholder传入值与feed_dict喂食器的联系与用法
- React上下文-Context
- python学习------文件处理