Spring JPA,CrudRepository的save方法是否立即提交给DB?

问题描述

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

编辑以下“ Michal Drozd”评论(以下内容适用于JpaRepository而非CrudRepository)
本文:Difference Between save() and saveAndFlush() in Spring Data JPA似乎表明对于Spring Data JPA,认情况下自动提交为false。

当我们使用save()方法时,与保存相关的数据 除非并且直到显式操作,否则操作不会刷新到数据库 调用了flush()或commit()方法

解决方法

save()

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

,

如果启用了Spring JPA自动提交(@),则在数据库设置过程中(春季初始化期间),数据库中的autocommit变量设置为true(对于MySQL,它是spring.datasource.hikari.auto-commit=true),它将不会为每个SQL语句调用commit。 如果要使用提交,则需要事务。因此,要么启用自动提交,要么在事务中工作。