Spring JPA 事务如何在提交前存储数据
How Spring JPA transactions store data before commit
假设我需要创建 100.000 条记录,而不是 .save()
它们。所有记录应保存在一起,并且只允许一次交易。显然,这是一个问题,程序可能 运行 内存不足。但是,如果我在同一个事务中分块执行相同的工作,会发生什么情况?每次迭代 1000 条记录,然后我保存它们。它会解决问题吗?直觉上我认为它不会,设计是错误的。在我 .save()
之后实体会发生什么? JPA 是否仍然保留对所有已保存实体的引用?我在哪里可以阅读更多关于这个主题的信息?谢谢
But what will happen if I will do the same work in the same transaction but in chunks? 1000 records per iteration and than I save them. Will it fix the problem?
如果您使用以下方法,它将解决问题:
while (hasNextBatch()) {
saveBatch();
entityManager.flush();
entityManager.clear();
}
What happens with entities after I .save()? Does JPA still keep references to all saved entities?
是(除非您执行上述操作)。
Where can I read more on this topic?
Here,例如
假设我需要创建 100.000 条记录,而不是 .save()
它们。所有记录应保存在一起,并且只允许一次交易。显然,这是一个问题,程序可能 运行 内存不足。但是,如果我在同一个事务中分块执行相同的工作,会发生什么情况?每次迭代 1000 条记录,然后我保存它们。它会解决问题吗?直觉上我认为它不会,设计是错误的。在我 .save()
之后实体会发生什么? JPA 是否仍然保留对所有已保存实体的引用?我在哪里可以阅读更多关于这个主题的信息?谢谢
But what will happen if I will do the same work in the same transaction but in chunks? 1000 records per iteration and than I save them. Will it fix the problem?
如果您使用以下方法,它将解决问题:
while (hasNextBatch()) {
saveBatch();
entityManager.flush();
entityManager.clear();
}
What happens with entities after I .save()? Does JPA still keep references to all saved entities?
是(除非您执行上述操作)。
Where can I read more on this topic?
Here,例如