zoukankan      html  css  js  c++  java
  • 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()方法具有延迟性。

  • 相关阅读:
    webpack 添加 jquery 插件
    openldap安装配置
    生成ssl证书
    vyos (三) HA
    vyatta的fork开源版本
    vyos (一) 基础配置
    iptable软路由
    keepalive实现web服务器active/passive
    docker学习(二)
    docker学习(一)
  • 原文地址:https://www.cnblogs.com/zouhong/p/13530900.html
Copyright © 2011-2022 走看看