所以我試圖配置休眠進行批處理的目的。我已經構建了一個示例應用程序,並根據Hibernates文檔進行了配置。休眠批處理
但是在配置Hibernate註銷SQL之後,它看起來好像沒有執行批量插入,而只是單獨插入。我讀這本日誌錯了嗎?
所以我在我的Spring Boot應用程序中配置了以下屬性。
spring.jpa.properties.hibernate.jdbc.batch_size=10
spring.jpa.properties.hibernate.show_sql=true
spring.jpa.properties.hibernate.format_sql=true
這是我非常基本的批作家..
@Transactional public class BatchWriter {
private EntityManager entityManager;
private int batchSize;
public BatchWriter(EntityManager entityManager, int batchSize) {
this.entityManager = entityManager;
this.batchSize = batchSize;
}
public void writeBatchOfCustomers(int numOf) {
for(long i = 0; i <= numOf; i++) {
Customer customer = new Customer(i);
entityManager.persist(customer);
if (i % batchSize == 0) { //20, same as the JDBC batch size
//flush a batch of inserts and release memory:
entityManager.flush();
entityManager.clear();
}
}
}
}
現在我正在此插入20個客戶,例如在休眠日誌,我看到下面的20倍:
Hibernate:
insert
into
customer
(first_name, last_name, id)
values
(?, ?, ?)
我在這裏錯過了什麼?
它目前使用H2數據庫的Spring Boot自動配置。然而,我將最終使用Spring Batch和Oracle數據庫,它將使用大約35個屬性插入大約30k個對象。
任何幫助表示讚賞。
感謝,
爲什麼在配置JPA時使用普通的SessioNFactory?你應該使用'EntityManager'而不是'SessionFactory'。 –
由於該代碼已經足夠複製掉休眠文檔,因此它只是丟棄。我沒有看到影響? – buymypies
同樣,您正在配置JPA,但正在使用普通的'SessionFactory'。你正在配置X,但是使用Y.你爲什麼認爲配置X會影響Y.如前所述,使用'EntityManager'(只需將它注入到你的作者中)並用'@ Transactional'註釋這個類。刪除您擁有的任何Hibernate配置,並讓Spring Boot爲您配置JPA。 –