Spring JPA,CrudRepository的保存方法会立即提交到DB吗?



默认情况下,Spring Data JPA已禁用自动提交
因此,如果我使用/扩展CrudRepository来使用save方法保存对象,那么场景后面会发生什么??将对象保存到DB后,spring-jpa是否也提交操作
如果没有,我如何显式提交操作?

编辑以下内容"Michal Drozd";comment:(下面是JpaRepository,而不是CrudRepository(
本文:Spring Data JPA中的save((和saveAndFlush((之间的差异似乎表明,对于Spring Data JPA.,自动提交默认为false。

当我们使用save((方法时,与save关联的数据操作将不会刷新到数据库,除非调用flush((或commit((方法。

如果Spring JPA autocommit被打开(spring.datasource.hikari.auto-commit=true(,那么在数据库设置期间(在Spring初始化期间(,数据库中的autocommit变量被设置为true(对于MySQL,它是SET autocommit=1(,它将不会为每个SQL语句调用commit。如果您想使用提交,那么您需要事务。因此,要么启用自动提交,要么在事务中工作。

CrudRepositorysave()方法本身就是@Transactional。所以,如果您不在另一个事务的上下文中调用它,它将创建一个事务,并根据持久化实体的成功或失败来提交或回滚它。

最新更新