如何解决JPA实体类有Id保存也会新增一条新的数据问题
发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,本篇内容介绍了"如何解决JPA实体类有Id保存也会新增一条新的数据问题"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读
千家信息网最后更新 2026年11月01日如何解决JPA实体类有Id保存也会新增一条新的数据问题2.看isNew实现
本篇内容介绍了"如何解决JPA实体类有Id保存也会新增一条新的数据问题"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
两个不同的实体类深拷贝,然后把id赋值回去更新,会出现一条新数据。
A updateA = DTOMapper.MAPPER.po2po(bAudit);updateA.setId(1)sheetRepository.save(updateA);
1.save方法源码
/* * (non-Javadoc) * @see org.springframework.data.repository.CrudRepository#save(java.lang.Object) */ @Transactional publicS save(S entity) { if (entityInformation.isNew(entity)) { em.persist(entity); return entity; } else { return em.merge(entity); } }
在这里说一下,save上spring就已经加了 @Transactional 开启事务的注解。用spring来管理事务就必须开启事务,不然保存不了,因为SET AUTOCOMMIT=0了。
save方法的第一句代码就是判断entity是否是新增还是更新。
2.看isNew实现
第一个是AbstractPersistable提供的,也是我们熟知的 ,根据id是否为空来判断是否是更新
/** * Must be {@link Transient} in order to ensure that no JPA provider complains because of a missing setter. * * @see org.springframework.data.domain.Persistable#isNew() */ @Transient // DATAJPA-622 public boolean isNew() { return null == getId(); }第二个是 JpaMetamodelEntityInformation提供的
/* * (non-Javadoc) * @see org.springframework.data.repository.core.support.AbstractEntityInformation#isNew(java.lang.Object) */ @Override public boolean isNew(T entity) { if (!versionAttribute.isPresent() || versionAttribute.map(Attribute::getJavaType).map(Class::isPrimitive).orElse(false)) { return super.isNew(entity); } BeanWrapper wrapper = new DirectFieldAccessFallbackBeanWrapper(entity); return versionAttribute.map(it -> wrapper.getPropertyValue(it.getName()) == null).orElse(true); }这个是是根据version版本号来判断是否是更新,问题就出在这里,我们如果更新,必须更新实体的jpaVersion和数据库里的Version一致,不然就是新增操作。
总结:我一直在各种打印 id有木有赋值进去,刚开始是从对象里get出来的,后来又赋值给一个变量,然后怀疑jpa是不是直接拿自己的属性,而不是拿public方法(id是父类继承下来的),反正折腾了好久。
其实回想一下很简单,但是jpa没有给我报错,我觉得是jpa的不对,哈哈。
"如何解决JPA实体类有Id保存也会新增一条新的数据问题"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!
更新
实体
数据
问题
事务
方法
内容
就是
更多
知识
不同
不对
实用
一致
学有所成
接下来
两个
代码
变量
困境
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
科技互联网
美国互联网保险保险科技
互联网科技有限公司经营范围
互联网科技公司税收优惠
互联网科技小贷
中国互联网科技发展
沃里互联网科技
互联网科技论坛
互联网科技大会
互联网巨头投资的硬核科技
新华互联网科技2019
须眉科技是互联网公司吗
阿里巴巴算科技企业还是互联网
以后互联网后是啥科技
互联网科技教育视频
亳州好赞互联网科技有限公司
保险科技服务互联网营销体系
江苏苏星互联网科技有限公司
青岛互联网科技园
小牛互联网科技有限公司地址
上海互联网科技有限公司
互联网医疗科技
期待互联网科技
奇酷互联网科技公司
伴你行互联网科技有限公司
互联网 新科技
广州恒生互联网科技有限
恒生互联网科技指数跳水
996高科技互联网公司
雨阳互联网卡科技有限公司