【问题标题】: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

    【讨论】:

    • 非常感谢您的回答。简明扼要。
    猜你喜欢
    • 2016-10-23
    • 1970-01-01
    • 2015-12-17
    • 1970-01-01
    • 2018-02-14
    • 2017-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多