随着最近Spring Data JPA 使用的越来越多,觉得有些问题还是需要记录一下的。一、主要区别在saveAndFlush()上,此命令中的更改将立即刷新到DB。使用save(),就不一定了,它可能只暂时保留在内存中,直到发出flush或commit命令。但是要注意的是,即使在事务中刷新了更改但是未提交它们,这些更改对于外部事务仍然不可见,直到,提交这个事务。二、场景举例比如...
Spring
-
Data
-
Jpa
保存时save和saveAnd
Flush
的
区别
Jpa
是我们经常用到的ORM框架,使用它可以快速便捷的操作数据库,那么它有一个保存方法,你肯定不会陌生,就是save方法和saveAnd
Flush
,这两个方法可能会经常用到,那么什么时候使用save方法,什么时候使用saveAnd
Flush
呢,下面就进行简单总结一下。
Jpa
save
首先创建一个表,进行完整的代码演示。
-- auto-generated definition
create table t_user
On saveAnd
Flush
, changes will be
flush
ed to DB immediately in this command. With save, this is not necessarily true, and might stay just in memory, until
flush
or commit commands are issued.
在saveAn...
当instert时,会立即执行sql(但在commit之前仍然看不到数据)。 其他事务无法update同一行,即使set相同id,最后会以id+1的结果insert一条数据。可能跟事务的隔离级别有关。
当update时,不会立即执行sql,console不会打印sql。 其他事务可以update同一行数据。
saveAnd
Flush
当update时
当想要update数据时候,数据库会加上行锁。 其他事务会卡住无法及时commit。
自定义的update语句
会立即执行sql。不需要