簡體   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