Hibernate Merge (Illegal attempt to associate a collection with two open sessions)

Hibernate 错误:  Illegal attempt to associate a collection with two open sessions


由于hibernate中的session的特性,不允许在一个session中同时存在两个标示相同的对象也不允许
同一标示的对象被两个或两个以上的session关联(当然,这个错误是后者,前者的错误:A different object
with the same identifier value was already associated with the session).遇到这种情况怎么处理?


首先了解一个merge的特性:
1.现有一游离状态的对象(手动设置了id)
1).数据库不存在此条记录,merge会进行insert操作(update报错)。
2).数据库存在此条记录,merge执行更新操作(与update一样).
2.现有一游离状态的对象(id为null)
1).数据库当然不存在这个记录,merge会insert操作,id根据策略(update会报错)
3.现有一个临时对象
1).session中没有相同标示的对象,执行merge时,会直接查数据库然后更新,并不会再把
查询出来的对象放到session中.
2).session中有相同标示的对象,那么直接将这个对象的值赋值到session中的那个持久化
对象上。

可以看出,merge和update的主要区别在于,数据库存在(不存在)记录是怎么办? 是否纳入session中。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值