SpringData JPA save和saveAndFlush方法 以及实际应用的几个问题

JPA中save和saveAndFlush的区别,首先直接看图:

 

save是CrudRepository下的。

saveAndFlush是JpaRepository下的。

一般情况下save就足够了,但是如果在同一个transaction里,比如你在方法上标了@Transactional,这时你想先保存Order,然后直接在这个Transaction里保存OrderItem,但是OrderItem需要新建的Order的ID,这时候保存Order就可以用saveAndFlush,你的Entity就会有保存在数据里的id了。

讲到这儿,一些小伙伴就已经明白了,但是还有些萌新可能会被Transaction给蒙住。

Transaction是数据库提供的服务,跟spring啥的没啥关系,spring只是按照数据库厂商提供的规范封装扩展了一下。

所以想要理解save和saveAndFlush原理的,可以先去数据里试下Transaction,原来就是set auto_commit = 0; commit,rollback。

所有这里的flush就是commit的意思。
 

相关参考:https://blog.csdn.net/star1210644725/article/details/100550905  对两者有更深的理解。

补充:2020/06/24

JPA之update操作 --save()方法更新部分字段,不更新的字段变成null的解决办法:https://blog.csdn.net/NMZLduiduidui/article/details/105416820?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值