相比学习hibernate的童鞋都遇到过这个问题,今天遇到这个问题了,就此来总结一下。
出现这个异常的原因:
在同一个session内,如果已经有一个对象已经是持久化状态(load进来等),现在构造一个新的PO,和前一个持久化对象拥有相同的持久化标识(主键),在update或者delete的时候,就会抛这个错误。
举个例子(伪代码):
User user1 = session.load(1);
User user2 = new User();
user2.setId(1);//此时ID和user1一样,主键唯一!!!
user2.setUsername("fatkun");
session.update(user2);//这里会抛出这个错误
如何解决呢?、
session.evict(user1);//将前者的user1变成脱管状态,就可以了;
即做增删改的时候要保证hibernate的session会话里面的对象唯一性!!!!
结束。