自动提交和Spring声明式事务

时间:2010-11-22 11:03:05

标签: hibernate spring hibernate-mapping

我有一个用Propagation.Required注释的服务方法。它执行三个单独的操作。

  1. 如果表1中没有记录,则从表z插入表1
  2. 根据用户编辑/添加
  3. 插入/更新表格1
  4. 从表1中删除x条记录
  5. 原谅我的无知,但不应该所有这些都在一次交易中运行吗?从某种意义上说,如果第三个Query遇到异常,那么不应该是第一个&第二次回滚呢?在我的情况下,这不会发生。休眠自动提交设置会以任何方式影响txn边界吗?在我的情况下,自动提交设置为true。我要求的是,只有在所有表都成功的情况下才应该在这些表中进行提交。

3 个答案:

答案 0 :(得分:1)

你可以尝试再添加一个比服务层更高的层并从那里开始交易。

答案 1 :(得分:0)

你绝对不希望自动提交。这可能会在每次操作后进行。切换自动提交,并在最后添加显式提交。

答案 2 :(得分:0)

是的,Hibernate connection.autocommit属性设置将影响事务边界。

如果将其设置为true,Hibernate会将基础JDBC连接置于自动提交模式,这将在您自己的数据库事务中包装您执行的每个语句。

因此,例如,如果您的第三个查询/语句失败,则只会回滚您的第三个查询/语句。

要将所有三个单元作为一个单元执行,您需要关闭自动提交并在单个事务的上下文中执行所有这三个事务,声明性或其他方式。