SpringBoot Jpa 自动事务托管中 在进行对象的set修改后自动执行了update更新操作解决方案

在SpringBoot JPA的自动事务管理中,对象set方法修改后会自动执行update操作,这可能导致不必要的数据库更新。通过分析,发现这是由于session缓存中数据变化引发的同步机制。为解决此问题,文章提供了三种解决方案:关闭session缓存、创建PO和VO对象分离、手动接管事务并清除修改记录。目前采用的方法是在set前接管事务,set后擦除修改记录,避免了自动更新。
摘要由CSDN通过智能技术生成

这个问题是在项目开发到一半的时候,莫名出现的bug,我还纳闷,明明仅仅执行了查询操作,怎么会有update操作的记录去修改了我数据库的对应值。以为自己方法写串线了,debug了好久都没找到原因。

起因是这样,因为业务要求,取出对象值后仅给前端返回自定义业务的set操作,并不需要去数据库修改对应行数据。但是前段每次执行查询操作后,调用object.set方法都自动执行了一次update操作,苦恼了一下午,在网上搜索了很多资料看完后,终于找到了答案。

没错 就是Springboot Jpa 的自动事务托管中,他自作聪明(也可能是自动事务更符合业务开发场景,我孤陋寡闻,自作聪明的说框架自作聪明了,哈哈),当session中的缓存对象数据行有改变时(set赋值后)与数据库数据不一致,这时候同步锁就会去flush数据库的对应行数据,让其和session中对象的数据相同。唉 这个多出来的update操作完全是我不需要的。

怎么办和业务冲突了。

在网上查阅后,最后总结出了三种解决方案

第一种就是直接关闭session的缓存,不建议这么干,因为很多业务还是需要用到session的。一旦这么干,你的很多业务就要另辟他法了。拆东墙补西墙!

第二种(标准开发中要这么设计)就是 创建两个相同的对象bean,一个PO 另一个VO,因为你对springboot jpa 自动事务托管的对象(PO)我们只执行get操作,不去set它,而是创建另一个同名的VO去接收数据

  • 6
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值