gpt4 book ai didi

带有 Hibernate 的 SPRING JPA 更新所有实体实例,即使使用一个实体调用保存也是如此

转载 作者:行者123 更新时间:2023-12-05 01:21:35 25 4
gpt4 key购买 nike

我正在将 Spring JPARepository 与 hibernate 一起使用,并且有一个关于实体更新的问题。我通过传递单个实体来调用 jparepository.save(entity) 但在跟踪日志中我也可以看到为数据库中的其他行发出的更新语句。在调用 save 之前,我有一个 findAll 并且一些实体的值正在改变。但我只传递一个实体进行保存,但所有更新的实体仍然被保存。您能否提供任何相关信息。

最佳答案

当您从数据库加载实体时,这些实体就是“托管实体”。如果您更改“托管实体”(并稍后提交事务),则不需要显式保存它们。 (这就是“管理”的意思。)

但 Hibernate 不会立即更新数据库,而是会等到:

  • 您提交交易
  • 您调用 EntityManager.flush
  • 你通过 Hibernate 执行一些数据库查询或保存! (当您绕过 Hibernate 并通过普通 JDBC/Spring JDBC 模板执行查询时,您需要首先调用 EntityManager.flush,否则您可能看不到未喷射刷新的数据(https://stackoverflow.com/a/29825882/280244 ))

这是你观察到的:

  • 1) 加载一些实体,使它们成为托管
  • 2) 你修改了它们,但是hibernate还是不执行sql更新
  • 3) 您查询某个实体或保存一个实体, hibernate 刷新更改

关于带有 Hibernate 的 SPRING JPA 更新所有实体实例,即使使用一个实体调用保存也是如此,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17887900/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com