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,例如