save和saveAndFlush其实底层多了一个entityManager的flush操作。而这个flush操作会将执行的sql发送至数据库服务器。而save方法需等到事务提交的时候,才会进行发送sql执行sql语句。

在使用的时候,如果save使用不当,当前事务不提交,这时候其他事务过来进行修改数据,可能会产生数据覆盖的情况。

而在使用saveAndFlush的时候,当前事务不提交,其他事务过来的时候修改同一行记录,会产生锁等待现象,如果使用saveAndFlush建议将saveAndFlush操作放在最后执行,最大粒度的减少锁等待时间。