一个SaveOrUpdate的不执行问题
来源:互联网 发布:4首最流行的网络歌曲 编辑:程序博客网 时间:2024/06/06 18:30
一个SaveOrUpdate的不执行问题
转自:http://hi.baidu.com/dmworld_2012/blog/item/238c40936d7fa394a877a443.html
原因相信大家都知道,因为在hibernate中同一个session里面有了两个相同标识
但是是不同实体,当这时运行saveOrUpdate(object)操作的时候就会报这个错误。
呵呵,也许你会说,你这么说跟没说没什么区别,我承认,呵呵,我不知道具体
为什么会产生这个错误,要不然也不会很久都没有解决,现在,给出一个临时的
解决方案,给向我一样,没有办法找到根源的人一个能够继续执行下去的方法
(当然是对的,只是不是从产生原因入手)
其实要解决这个问题很简单,只需要进行session.clean()操作就可以解决
了,但是你在clean操作后面又进行了saveOrUpdate(object)操作,有可能
会报出"Found two representations of same collection",我找了很多资料,
没有什么很好的解释,其中这篇文章帮助最大
http://opensource.atlassian.com/projects/hibernate/browse/HHH-509。
最后通过session.refresh(object)方法就可以解决了,注意,当object不
是数据库中已有数据的对象的时候,不能使用session.refresh(object)因
为refresh是从hibernate的session中去重新取object,如果session中没
有这个对象,则会报错所以当你使用saveOrUpdate(object)之前还需要判
断一下
当然这个问题最容易解决的办法还是使用Hibernate里面自带的merge()
方法。不过我始终觉得碰到问题就用这种软件自带的非常用方法
(和saveOrUpdate(),save(),update()相比)感觉十分不爽。
后来我还发现这种错误经常出现在一对多映射和多对多映射,请大家在
使用一对多和多对多映射的时候要小心一些
Hibernate 疑难异常及处理
1、a different object with the same identifier value was already associated with the session。
错误原因:在hibernate中同一个session里面有了两个相同标识但是是不同实体。
解决方法一:session.clean()
PS:如果在clean操作后面又进行了saveOrUpdate(object)等改变数据状态的操作,有可能会报出"Found two representations of same collection"异常。
解决方法二:session.refresh(object)
PS:当object不是数据库中已有数据的对象的时候,不能使用session.refresh(object)因为该方法是从hibernate的 session中去重新取object,如果session中没有这个对象,则会报错所以当你使用saveOrUpdate(object)之前还需要判断一下。
解决方法三:session.merge(object)
PS:Hibernate里面自带的方法,推荐使用。
2、Found two representations of same collection
错误原因:见1。
解决方法:session.merge(object)
以上两中异常经常出现在一对多映射和多对多映射中
- 一个SaveOrUpdate的不执行问题
- getHibernateTemplate().saveOrUpdate 不执行
- getHibernateTemplate().saveOrUpdate 不执行也不报错可能的原因
- hibernatetemplate 的update和saveOrupdate方法不能用的问题
- oracle同时执行saveOrUpdate的操作
- hibernate flush 机制与调用 saveOrupdate 后不立即打印 sql 的问题
- crontab不执行的问题
- Aspect不执行的问题
- onActivityResult不执行的问题
- onActivityResult方法不执行的一个原因
- 关于 quartz 1.6.1 的一个死等问题,导致任务不执行
- 关于 quartz 1.6.1 的一个死等问题,导致任务不执行
- 关于 quartz 1.6.1 的一个死等问题,导致任务不执行
- 解决cron不执行的问题
- 解决cron不执行的问题
- 解决cron不执行的问题
- crontab oracle expdb 不执行的问题
- struts2中action不执行的问题
- [jquery] 简单判断滚动条位置
- CMD:[2]怎样获取文件夹的目录层次结构
- hdu 2870 Largest Submatrix(dp)
- left join 的SQL 转hql
- 状态模式--的一个试用场景
- 一个SaveOrUpdate的不执行问题
- HDU 大数模板之Children’s Queue
- c++第一次作业
- Spring MVC之@RequestMapping 详解
- Android 自定义view的实现
- ubuntu 安装oracle-jdk7
- javascript中的call()和bind()
- [js实例] js控制audio背景音乐
- 用一个异质链表保存学生数据