我有一个用Propagation.Required
注释的服务方法。它执行三个单独的操作。
原谅我的无知,但不应该所有这些都在一次交易中运行吗?从某种意义上说,如果第三个Query遇到异常,那么不应该是第一个&第二次回滚呢?在我的情况下,这不会发生。休眠自动提交设置会以任何方式影响txn边界吗?在我的情况下,自动提交设置为true。我要求的是,只有在所有表都成功的情况下才应该在这些表中进行提交。
答案 0 :(得分:1)
你可以尝试再添加一个比服务层更高的层并从那里开始交易。
答案 1 :(得分:0)
你绝对不希望自动提交。这可能会在每次操作后进行。切换自动提交,并在最后添加显式提交。
答案 2 :(得分:0)
是的,Hibernate connection.autocommit
属性设置将影响事务边界。
如果将其设置为true
,Hibernate会将基础JDBC连接置于自动提交模式,这将在您自己的数据库事务中包装您执行的每个语句。
因此,例如,如果您的第三个查询/语句失败,则只会回滚您的第三个查询/语句。
要将所有三个单元作为一个单元执行,您需要关闭自动提交并在单个事务的上下文中执行所有这三个事务,声明性或其他方式。