JPA中save和saveAndFlush的区别
JPA中save和saveAndFlush的区别,⾸先直接看图:
save是CrudRepository下的。
saveAndFlush是JpaRepository下的。spring到底是干啥的
⼀般情况下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的意思。
Spring Data JPA⾼并发下,使⽤save()发现⽆论怎么同步锁都会出现数据误差,后来换成saveAndFlush()⽅法结果对了,以此推断save()⽅法具有延迟性。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。