【问题标题】:How Spring JPA transactions store data before commitSpring JPA 事务如何在提交前存储数据
【发布时间】:2021-05-04 11:49:56
【问题描述】:
假设我需要创建 100.000 条记录,而不是 .save() 它们。所有记录应保存在一起,并且只允许一笔交易。显然,这是一个问题,程序可能会耗尽内存。但是,如果我在同一个事务中分块做同样的工作,会发生什么?每次迭代 1000 条记录,然后我保存它们。它会解决问题吗?直觉上我认为它不会而且设计是错误的。在我.save() 之后,实体会发生什么? JPA 是否仍保留对所有已保存实体的引用?我在哪里可以阅读有关此主题的更多信息?谢谢。
【问题讨论】:
标签:
java
spring
jpa
transactions
【解决方案1】:
但是如果我在同一个事务中分块做同样的工作会发生什么?每次迭代 1000 条记录,然后我保存它们。它会解决问题吗?
如果您使用以下方法,它将解决问题:
while (hasNextBatch()) {
saveBatch();
entityManager.flush();
entityManager.clear();
}
在 .save() 之后实体会发生什么? JPA 是否仍保留对所有已保存实体的引用?
是的(除非您执行上述操作)。
我可以在哪里阅读有关此主题的更多信息?
例如Here。