有关a different object with the same identifier value in a session

直接的意思就不说了,只用自己的经验说一下为什么会出现这个问题,
一般情况下,使用SPRING的面向切面的事务管理容易出现这个问题,原因是在进入一个新的事务前取出的PO对象因为之前的事务结束对应的session会被关闭,这时的PO对象已经为游离状态,在下一个事务方法内如果打开了与其关联的对象那此对象会自动被加载,这样新的session中就会有一个PO对象和一个游离对象,如果此时操作之前的游离对象,那么就会出现这个错误,只要保证游离对象在此session内成为PO对象,就不会出现以上问题。举例:
方法a(){
   Object c = ..从事务中取得后session关闭
   b(c);调用方法b
}

方法b(Object c){
   Object d = ...从新session中取得d对象但d 对象关联加载了c对象
  session.update(c) 此时就会出现如标题的错误
}

猜你喜欢

转载自tiantao78.iteye.com/blog/1936827