hibernate自动生成uuid策略下手动setId进行update报错

最近项目需要进行数据同步,第三方修改数据,需要同步更新、添加到我方数据库。
我方系统使用的是注解配置的hibernate,主键id是自动生成的uuid。

问题 :   第三方数据的id不可以set进一个新new出来的对象 , 再update , 这样做会报错 。(为什么报错?)
解决
1、修改id生成策略 对系统的影响较大,(不合适)
2、删除之后再新增(不合适:如果id 有关联数据,该方法完全无法使用)
3、就是使用sql语句
4、获取到我方系统对象数据A,将第三方数据B除了id之外的所有值,赋值给A对应的字段,再更新;
5、 通过hibernate 的merge()方法;
原因:
hibernate中对象有四种状态:
在这里啊打发图片描述

  1. 瞬时状态一个新建的对象是处于瞬时状态的,未被实例化,即不和数据库中的任意表有关联,不存在与session中、不存在于数据库中。
  2. 持久化状态(托管状态):这个对象是包含数据库同一性的实体,存在与session中、存在与数据库中。
  3. 游离状态(脱管状态):对象状态不与数据库状态同步,但仍包含持久化数据,不存在与session中。
  4. 移除状态(删除状态):一个对象如果已经被计划在一个工作单元结束时删除,它就是处于移除状态,。

在这里插入图片描述
修改update 是一个 游离到持久的一个过程,而新new 的对象是瞬时状态,所以会报错!

hibernate 的 merge

	extends HibernateDaoSupport

该类继承 HibernateDaoSupport

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值