【问题标题】:multiple batch insert within a transaction事务中的多个批量插入
【发布时间】:2013-06-18 16:05:22
【问题描述】:

我正在尝试使用休眠批量插入从文件中插入每 100 条记录。如果我将逻辑包装在事务中,它是否会按预期工作,例如,假设我正在从 300 条记录中创建 3 批并包装事务内部的逻辑,如果第三批出现问题,则事务将回滚第一批和第二批。

【问题讨论】:

    标签: java hibernate jdbc


    【解决方案1】:

    始终将您的批次包装在事务中。如果您为每个事务批处理 100 个插入,那么如果一切正常,则将提交所有 100 个插入。我还建议您使用无状态会话来加快批量插入。我强烈推荐你阅读 Hibernate 文档的Batch processing 教程。

    【讨论】:

    • 我可以将所有批次包装在一个事务中吗?
    • 我刚刚浏览了你提供的链接,我的休眠 pojo 有复杂的对象图并且里面有集合,所以我发现在这种情况下我不能使用无状态会话。如果我错了,请纠正.
    • @cooper 不正确。当您希望休眠对您的 pojos 进行脏检查时,您需要有状态的会话,这在您的情况下是不必要的(根据我的阅读)。管理脏污在内存和性能方面有额外的开销。
    【解决方案2】:

    简而言之:它将按预期工作。

    Hibernate 没有限制每个批量插入都需要在单独的事务中。如果您在一个事务中执行多个批量插入,它们将作为一个整体提交/回滚。

    (当然,如果你有嵌套事务或者在事务中使用里程碑,那就另当别论了。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-30
      • 2015-11-23
      • 1970-01-01
      • 2010-09-07
      • 2021-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多