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的意思。

Spring Data JPA高並發下,使用save()發現無論怎么同步鎖都會出現數據誤差,后來換成saveAndFlush()方法結果對了,以此推斷save()方法具有延遲性。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM