![](/img/trans.png)
[英]spring.jpa.hibernate.ddl-auto=update not working in spring boot
[英]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.