save() 和 saveAndFlush() 都可以返回实体 ID,有什么区别吗?

问题描述 投票:0回答:1

Spring Data JPA 中的 save() 和 saveAndFlush() 都可以返回实体 ID。

据我搜索,save()方法在被flush()和commit()调用之前应该无法返回任何值。但我可以使用 save() 方法获取实体 ID,就像 saveAndFlush() 一样。

当我实现 JpaRepository 并调用 save() 和 saveAndFlush() 方法时,我已经获得了它们的实体 ID。

所以我的问题是这怎么可能?是因为 save() 方法的 @Transacitonal 吗?如果是的话,这两种方法在这一点上真的有什么区别吗?

java spring hibernate spring-data-jpa spring-data
1个回答
0
投票

Spring Data JPA 中 save() 方法的行为由底层 JPA 提供程序决定。对于 Hibernate(Spring Data JPA 使用的默认 JPA 提供程序)来说,save() 方法不会立即将更改刷新到数据库。相反,当提交事务或显式调用刷新操作时,更改会排队并刷新到数据库。

但是,当使用支持在事务提交之前返回已保存实体的 ID 的数据库提供程序时,例如具有 AUTO_INCREMENT 功能的 MySQL,save() 方法可以立即返回 ID。

© www.soinside.com 2019 - 2024. All rights reserved.