微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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。 如果要使用提交,则需要事务。因此,要么启用自动提交,要么在事务中工作。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。