Hibernate jpa 乐观锁 save方法 更新数据

本文探讨了Hibernate JPA在使用乐观锁时的两个现象:一是未调用save或update,数据库中的WareHouseId仍被更新;二是版本号增加后,更新操作仍能成功。分析了在事务中,由于对象的托管状态导致的自动同步以及在更新验证过程中,缓存对象版本号的影响。同时解释了更新条件中的version匹配逻辑和缓存对象版本变化的原因。

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

以下代码中  参数 sPartsStock,是从页面上传过来的。

1 现象一

这段代码,执行完,提交事务的时候,数据库里的值 WareHouseId 会被更新,但是代码里并没有写save或者update方法

原因:库里查出的对象 sPartsStock123 是  托管状态 会自动同步到数据库,不会验证乐观锁,执行flush操作

2 现象二

代码执行前,手动把数据库里的version字段+1,也就是说 sPartsStock 中的version为 100, sPartsStock123 中的version为 101,

这段代码,执行完,不会报乐观锁的异常,并且会更新成功,且version会变为102。

问题1  为什么没有报乐观锁异常

DefaultMergeEventListener.isVersionChanged 来判断version 是否相同

boolean c
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值