当前位置: 首页 > 知识库问答 >
问题:

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

彭阳朔
2023-03-14

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

编辑以下“Michal Drozd”评论:(以下是针对JpaRepository而非Crudepository)本文:Spring数据JPA中save()和saveAndFlush()的区别似乎表明,对于Spring数据JPA,自动提交默认为false。

当我们使用保存()方法时,与保存操作关联的数据不会刷新到数据库,除非并且直到显式调用flush()或提交()方法。

共有2个答案

公孙阳羽
2023-03-14

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

莫振
2023-03-14

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

 类似资料:
  • 我有以下问题: 我正在使用Spring MVC 4.0.5和Hibernate 4.3.5,我正在尝试创建一个Restfull Web应用程序。问题是,我想排除某些字段,使其无法序列化为 JSON,具体取决于使用方面在控制器中调用的方法。 我现在的问题是Hibrate不会在事务从方法返回后立即提交事务,而只是在序列化之前提交。 Controller.java Service.java 方面的建议执

  • 问题内容: ~~~~ 如果这样做,会有所不同吗: 与 在基础查询和性能方面有什么区别? 问题答案: ~~~~ 来自: 因此,从某种意义上说,您的第二种业务方法仅对Crud Repository方法产生了阴影,它会迭代列表并代表您进行调用。 只要从您的业务方法中 划定 了 事务,性能或执行的查询就没有真正的区别。

  • 问题内容: 我 从http 函数进行了如下简单 下载 (为简化起见,省略了错误处理): 但是,由于我异步调用了数十次,因此很少有人报告错误,因为抱怨无法在找到文件。 我使用了相同的URL列表进行测试,但失败了大约30%。一次下载一个相同的URL列表。 测试了一下,我发现下面的代码 并非总是打印,但有时第一个答案打印。 我怀疑太多的异步调用不能保证文件的创建。这是真的?有什么方法可以保证文件创建?

  • 我正试着在从主题读到它之后提交一个信息。我通过这个链接(https://www.confluent.io/blog/apache-kafka-spring-boot-application)使用Spring创建一个Kafka消费者。通常情况下,它工作得很好,消费者得到消息,然后等待另一个人进入队列。但问题是,当我处理这些消息时,它会花费很多时间(大约10分钟),kafka队列认为消息没有被消耗(提

  • 问题内容: 在我使用的许多代码中,都有一些可怕的东西,例如: 或者-更糟糕的是: 有正确的方法来: 创建一个新的URL(或者它是一个URI)。 向其添加正确的转义参数。 在这些参数中添加格式正确的文件路径。 将其解析为字符串。 从本质上讲,仅构建字符串比正确地构建字符串太容易了。有没有一种方法可以像构建字符串一样容易 地正确 完成呢? 添加 为了清楚起见-经过一番思考-我想我正在寻找类似的东西:

  • 问题内容: 例如,我可能想进行如下分配(在JavaScript中): 在Java中,如何使用Lambdas做类似的事情?编译器不喜欢这样的东西: 问题答案: 否,因为Lambda需要目标类型。您所能做的最好是将表达式转换为: 您必须为特定的lambda使用正确的功能接口。如您所见,它非常笨拙,没有用。 更新 上面的代码是JavaScript代码的直接翻译。但是,直接转换代码并不能总是获得最佳结果。