0

我有一个用Propagation.Required. 它执行三个独立的操作。

  1. 如果表 1 中没有记录,则从表 z 插入表 1
  2. 根据用户编辑/添加插入/更新表 1
  3. 从表 1 中删除 x 条记录

原谅我的无知,但所有这些不应该在单一事务下运行吗?从某种意义上说,如果第三个查询遇到异常,第一个和第二个回滚也不应该吗?在我的情况下不会发生这种情况。休眠自动提交设置会以任何方式影响 txn 边界吗?在我的情况下,自动提交设置为 true。我需要的是,只有在所有表都成功的情况下,才能在这些表中的任何一个中进行提交。

4

3 回答 3

1

您能否尝试添加比服务层更高的一层并从那里开始交易。

于 2010-11-22T11:11:34.213 回答
0

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

于 2010-11-22T11:57:50.903 回答
0

是的,Hibernateconnection.autocommit属性设置会影响事务边界。

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

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

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

于 2010-12-30T09:44:15.080 回答