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中。
由于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中。