Spring Data JPA 调用save方法异常无法被业务catch捕捉到的原因

近日朋友项目出现了一个问题,就是使用JPA的save方法进行DB保存,即使出现错误,也不希望事务回滚(但是如果这样不应该不加事务注解么?),但是使用过程中发现即使catch住异常,事务依然回滚了,

经过调试,调用save方法后根本不走catch代表块,通过debug观察SQL打印时间,发现调用save方法后,并没有出现SQL语句在日志中,而是等业务方法执行完毕后,才打印SQL语句并出现异常,

异常则被代理类捕捉了,由于JPA做了很多优化,根据调用save方法不及时打印SQL来看,极有可能是JPA为了节省SQL请求开销,等到事务准备提交时才请求DB,

根据查阅资料发现确实是如此,因此如果想理解请求DB,请不要调用save方法,调用saveAndFlush方法,即可立即请求数据库,此时数据库发生异常即可被业务方法catch到。

此文章说的也比较详细:https://www.jianshu.com/p/717b681d04f3

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值