当前位置: 首页 > 面试题库 >

使用Hibernate SPRING JPA更新所有实体实例,即使使用一个实体调用保存

段干华皓
2023-03-14
问题内容

我将SpringJPARepository与hibernate一起使用,并且对实体更新有一个问题。我通过传递单个实体来调用jparepository.save(entity),但在跟踪日志中,我也可以看到针对数据库中其他行发出的更新语句。在调用save之前,我有一个findAll并且某些实体的值正在更改。但是我只传递了一个要保存的实体,但是仍然保存了所有更新的实体。您能提供有关此信息吗?


问题答案:

从数据库加载实体时,该实体就是“托管实体”。如果更改“托管实体”(并在以后提交事务),则无需显式保存它们。(这是“托管”的意思。)

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

  • 您提交交易
  • 您调用EntityManager.flush
  • 您执行一些数据库查询或通过Hibernate保存!(当您绕过Hibernate并例如通过纯JDBC / Spring JDBC模板执行查询时,您需要先调用EntityManager.flush,否则,您可能看不到未喷射刷新的数据

这就是您观察到的:

  • 1)您加载了一些实体,因此它们成为托管对象
  • 2)您修改它们,但hibernate仍然不执行sql更新
  • 3)您查询某个实体或保存一个实体,hibernate刷新更改


 类似资料:
  • 我使用SpringBoot web和Morphia DAO(使用MongoDB)创建了一个REST web服务。 正如我在MySQL上使用Hibernate时所做的那样,我希望使用通用实体、存储库和endpoint,以便只需设置实体、继承存储库和服务,并将生成的CRUD用于REST调用。 它几乎完成了,但是我在使用吗啡对我的实体进行通用更新时遇到了一个问题。到目前为止,我所看到的一切都在谈论手动设

  • 我正在尝试使用Querydsl(4.1.4)查询JPA,如本文http://www.Querydsl.com/static/Querydsl/latest/reference/html/ch02.html#jpa_integration所述。我使用Hibernate(5.2.12.final)作为JPA后端。我使用和处理器从JPA注释类生成Querydsl查询类型。 这将打印: 原始JpaUpda

  • 我试图创建一个注册用户的功能。 我遵循了这篇文章中的建议:将空作为id保存,并Hibernate,但解决方案对我不起作用。这是我的用户类 这是我的账户类 我的日志显示了以下输出

  • 我在Spring Boot中使用Spring Data JPA。 在使用Spring Data Jpa存储库将一个实体保存到数据库后,我不会得到整个实体。即只获取我传递给save()的值。 组织实体: 控制器类: 服务类别:

  • 问题内容: 问题基本上与下面的问题相同: JPA级联仍然存在,对分离实体的引用将引发PersistentObjectException。为什么? 我正在创建一个引用现有的分离实体的新实体。现在,当我将此实体保存在spring数据存储库中时,会引发异常: 如果我们查看Spring数据JPA的源代码中的save()方法,则会看到: 如果我们看一下isNew() 因此,基本上,如果我保存()一个新实体,

  • 是否有任何方法可以随时更新hibernate加载到程序中的实体的所有引用? 例如,我在A类中加载了id为“1”的产品,并在B类中更改了id为“1”的同一产品的新加载,但A类中的产品没有更改。我该怎么解决这个? 数据在SQL表中更新,而不是在“product”中更新,它是与“productDUP”相同的实体。我该如何解决问题呢?有没有办法在程序中解决,不是每次我们需要的时候都加载数据?