我正在尝试实现此博客文章https://www.baeldung.com/jpa-hibernate-batch-insert-update
中记录的批量插入和更新我在批处理更新中遇到一些性能问题。我正在尝试更新大约100万个储蓄帐户,并且每个储蓄帐户与储蓄帐户交易具有@OneToMany
关系。我的处理方式是先保存所有交易,然后再更新所有储蓄帐户。批保存/插入过程非常迅速,但是批更新需要很长时间才能完成。
我打开了休眠的SQL记录器,我看到它为每个储蓄帐户生成两个更新语句:一个用于储蓄帐户,一个用于交易。如何关闭交易更新?
关于如何优化批处理更新的任何想法?
批量插入储蓄帐户交易记录:
int i = 0;
for(SavingsaccountTransaction savingsaccountTransaction : savingsaccountTransactionsForSaving) {
if(i > 0 && i%BATCH_SIZE == 0) {
entityManager.flush();
entityManager.clear();
}
entityManager.persist(savingsaccountTransaction);
i++;
}
更新储蓄帐户:
int i = 0;
for(Savingsaccount savingsaccount : savingsaccountsListForupdate) {
if(i > 0 && i%BATCH_SIZE == 0) {
entityManager.flush();
entityManager.clear();
}
entityManager.merge(savingsaccount);
i++;
}