完美解决SSH项目Hibernate update时候org.springframework.dao.DuplicateKeyException

相信大家在使用Hibernate对查询结果进行更新的时候都会遇见过同样的问题。

完美解决SSH项目Hibernate update时候org.springframework.dao.DuplicateKeyException_第1张图片

关键的问题是
a different object with the same identifier value was already associated with the session
意思是有另外一个对象拥有的那个ID,与Session中已经关联的ID一致。就是说那个对象的ID在Session之中已经被关联了。
也就是我们在之前使用Hibernate查询了一个对象处理,此时我们又重新创建了一个对象,这个对象跟查询的对象有着一样的ID,这样,在我们执行Update使用我们新建的对象进行更新的时候,就会报错。
解决方案其实很简单,就是不使用我们new 出来的那个对象进行更新保存。而是将我们new出来的这个对象所要保存的属性赋值给我们查询出来的那个对象。
这就涉及属性的克隆工作。
需要使用一个工具类

org.springframework.beans.BeanUtils
这个工具类是Spring提供的
copyProperties(Object source, Object target) throws BeansException

BeanUtils.copyProperties(elecUser, user);
//elecUser是源对象,user是目的对象,将elecUser中的属性赋值给user
//这个BeanUtils apache官方也有一个,只不过比较不完善,建议还是使用Spring提供的

只要将属性复制过去,数据库就会自动的和被查询出来的对象的属性保持一致,而我们也没有必要执行更新语句了

你可能感兴趣的:(Hibernate,Spring,Struts2)