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

本文解决Hibernate更新时出现的adifferentobjectwiththesameidentifiervalue错误。通过使用Spring的BeanUtils工具类复制属性到已存在的对象,避免了更新冲突。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

这里写图片描述

关键的问题是 
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提供的

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值