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

如何避免批量更新之前的select查询(分别针对每个实体)(Hibernate-spring数据jpa)

陈文景
2023-03-14

我正在使用spring-data-jpa的saveAll方法。

我知道当我更新一个实体时,hibernate需要重新附加分离的实体,这就是为什么在更新之前它会执行选择语句。

但当我尝试更新大约10.000个实体时,这意味着也将执行10.000 select,这是一个性能问题。

是否有任何方法可以将分离的实体重新连接为批量?

共有1个答案

巫马曜文
2023-03-14

Hibernate不会触发更新方法的选择查询。正是合并触发了额外的select以避免重复记录错误(NonUniqueObjectException)。因此,您可以使用update来持久化分离的实体。

@vlad-mihalcea的博客解释了不同方法的行为

 类似资料:
  • 问题内容: 有什么方法可以简化为一个查询吗? 问题答案: 是的,您可以使用以下查询进行操作:

  • 问题内容: 级联正是CSS变得特别而强大的原因。但在媒体查询的情况下,重叠 可 似乎有问题。 考虑以下CSS(CSS媒体查询重叠的连续规则): 因此,当屏幕正好为45em宽时,将根据标准CSS级联来处理45em处的重叠: 所有定义都将首先应用, 并将在此之后全部应用。 请考虑以下两个条件: 通常,所有文本都是,但是 查询A 是唯一的并且具有。 由于 查询B 适用于较大的视口,因此其文本具有CSS

  • 我正在使用具有HiberNate的Spring Boot1.5.2。 我有一个对象列表。每个对象都包含许多属性和@OneTo许多关系(即从数据库中获取此对象并将此对象更新到数据库需要很长时间)。 这就是我使用自定义 JPQL 查询的原因: 一个用于加载对象列表的基本属性 一个用于更新对象所需的属性 我从CrudRepository扩展了这个方法,用于获取对象列表(只有所需的属性) 现在,我想通过以

  • 下面是一个场景,我正在使用Spring Data JPA保存一个实体(我们将其称为CG实体)。在这个CG实体中,我们有很多实体一一,一多和M-M,在这些实体中,有更多的关系等等。我正在通过主键设置CG实体,并向其添加其他实体对象。所以基本上,这个CG实体PK应该作为FK来使用CG中的大多数其他实体。 有些实体是新的,有些实体是通过创建具有给定主Id的对象来设置的(因此不需要使用相关的存储库来查找和

  • 我正在使用Spring-Boot 2.5.0和MongoDB来持久化一些文档。这里是Github项目。 对于每个文档,我还需要自动保存一些审计信息,因此我扩展了以下类: 例如。让我们考虑类: 我遇到的问题是,当我通过JSON更新文档时,我能够更改/覆盖CreatedBy和CreatedDate字段的值。 这意味着,如果未提供字段,则结果值将保存为null,否则,它将为创建者和创建的字段保存新值。

  • 我有一个批处理过程,它正在为一组实体重新计算数据。通过Hibernate从DB获取实体列表: 当流程运行时,某些实体似乎正在分离,导致两种症状: 当尝试获取惰性数据时,我得到一个异常: 在我的第一次尝试中,我试图通过调用inside