繁体   English   中英

Spring boot hibernate/jpa 批量更新不起作用

[英]Spring boot hibernate/jpa batch update not working

应用属性

spring.datasource.url=jdbc:as400://localhost/

spring.jpa.properties.hibernate.jdbc.batch_size = 30
spring.jpa.properties.hibernate.order_updates = true
spring.jpa.properties.hibernate.batch_versioned_data = true

实体 -

@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Entity(name = "entity")
public class MyEntity {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "ID", nullable = false);

   @ManyToOne
   @JoinColumn(name = "HDR_ID", referencedColumnName = "HDR_ID")
   @JsonIgnore
   private Header header;

   @ManyToOne
   @JoinColumn(name = "STS_ID", referencedColumnName = "STS_ID")
   private Status status;
}

服务 -

this.myRepository.saveAll(MyEntitylist);

摇篮 -

    implementation 'org.springframework.boot:spring-boot-starter-actuator'
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    implementation 'org.springframework.boot:spring-boot-starter-data-elasticsearch'
    implementation 'org.springframework.boot:spring-boot-starter-web'

我正在使用 Spring Boot 2.3.5.RELEASE。 我正在尝试使用休眠批处理更新批量记录,但似乎不起作用。 我没有收到任何错误,记录在数据库中更新没有任何问题,但没有性能改进。 实际上,无论是否使用 Hibernate 批处理,我都找不到任何区别。 我检查了日志,他们的查询记录了每条记录,例如,如果我尝试保存 1000 条记录,那么日志中将有 1000 个更新查询。

我期望批处理后的更新查询较少,这取决于批处理大小,并且与没有批处理查询相比,它花费的时间相对较少。

我的代码中是否有任何配置问题? 有没有像 jdbc:as400 的 reWriteBatchedInserts 这样的选项来显示多行插入查询?

仅仅因为您在数据库日志中看到查询并不意味着批处理不起作用。 JDBC 批处理是协议级别的优化,依赖于驱动程序支持。 JDBC 驱动程序可以通过发出单独的语句来实现这一点。 优化通常来自重用相同的服务器句柄并批量发送值。 但是对于 1000 个元素,增益可能太小了。 如果您没有看到任何改进,您应该就此咨询您的驱动程序供应商。 您没有显示记录了哪种查询,您确定在更新语句之间没有执行其他语句吗?

如果您使用身份标识符生成器,​​Hibernate 会在 JDBC 级别透明地禁用插入批处理。

https://docs.jboss.org/hibernate/core/4.3/devguide/en-US/html_single/#batch

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM