Spring Data JPA中的保存()和saveAndFlush()都可以返回Entity ID,真的有区别吗?

x7yiwoj4  于 2023-10-20  发布在  Spring
关注(0)|答案(1)|浏览(209)

Spring Data JPA中的保存()和saveAndFlush()都可以返回Entity ID。
据我所知,保存()方法在被flush()和commit()调用之前不应该返回任何值。但是我可以使用保存()方法来获取实体ID,就像saveAndFlush()方法一样。
当我实现JpaRepository并调用保存()和saveAndFlush()方法时,我为它们都获得了实体ID。
所以我的问题是这怎么可能?是因为保存()方法的@Transacitonal吗?如果是的话,这两种方法在这一点上真的有区别吗?

rseugnpd

rseugnpd1#

Spring Data JPA中保存()方法的行为由底层JPA提供程序确定。在Hibernate的情况下,它是Spring Data JPA使用的默认JPA提供程序,保存()方法不会立即将更改刷新到数据库。相反,当提交事务或显式调用刷新操作时,更改将排队并刷新到数据库。
但是,当使用支持在提交事务之前返回已保存实体的ID的数据库提供程序时,例如具有REPORT_INCREMENT功能的MySQL,save()方法可以立即返回ID。

相关问题