`
siemenew
  • 浏览: 6495 次
  • 性别: Icon_minigender_1
  • 来自: 嘉兴
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

update时出现 adifferent object with the same identifierm value was already ...

 
阅读更多
    这两天在做一个练习项目时的更新模块时遇到一个问题,因为更新前要判断其中的一个属性值是否有重名,该属性的值重名有两个情况:
一种是与另外一个对象或另一条数据库记录重名,这种情况下只要改变该属性得值使得其唯一再用update(object)就没有什么问题。
另一种情况是该属性得值没有发生变化,用该属性值从数据库加载上来的对象与需要update的对象具有相同的标识(id值相同),此时执行update(object)时就会报以下错误:a different object with the same identifier value was already associated with the session。

这个错误的意思是说在session存在有相同标识的持久化对象,因此无法更新,一开始我的注意力放在如何把另外一个对象从session中去掉,结果试了很多方法都无法圆满的解决。

后来在查看HibernateTemplate的的方法时发现merge方法
merge(Object entity) : Copy the state of the given object onto the persistent object with the same identifier.

用这个方法代替update问题得到解决。

看来merge方法仅仅是把对象拷贝到session并更新数据库,而对象还是处于脱管状态。

分享到:
评论
Global site tag (gtag.js) - Google Analytics