【问题标题】:how to do multiple transactions in hibernate?如何在休眠中进行多个事务?
【发布时间】:2017-06-05 19:21:15
【问题描述】:
  1. 假设我们有 2 个表,表 A 和表 B。
  2. 我想在表 A 中插入一行,然后在表 B 中插入一行。
  3. 如果在表 B 中插入时出现问题,那么我还想回滚表 A 中的行插入

下图解释了我所做的

【问题讨论】:

  • 图片可以显示图表。但是将您的 cmets 和问题作为文本而不是图片。它几乎不可读,显然无法通过在网站上搜索找到。

标签: java mysql hibernate


【解决方案1】:

如果您必须坚持这种架构,这不是最好的架构,您需要在使用 B DAO 时启动一个新事务。

标记正在执行插入的方法:

@Transactional(propagation = Propagation.REQUIRES_NEW)
public void insertB(B b) {
    // insert B
}

现在在 A DAO 中将这个添加到插入 A 的方法中:

@Transactional(rollbackFor=Exception.class)
public void insertA(A a) {
    // insert A
}

现在,当 B DAO 中发生异常时,该事务将被回滚,然后异常将传播到 A DAO 并使该事务也回滚(除非您将捕获异常,否则将不会回滚)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-14
    • 1970-01-01
    • 1970-01-01
    • 2018-09-14
    • 2016-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多