gpt4 book ai didi

Java Spring : Understanding @Transactional rollbackFor and transaction demarcation

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:14:25 25 4
gpt4 key购买 nike

我假设以下堆栈跟踪是 java 调用:

B.method2 (annotated with a plain @Transactional)
A.method1 (annotated with a plain @Transactional)
Main.main (starting point of the call, with no current transaction)

我希望在输入 A.method1 时启动事务 - 并在离开 A.method1 时提交(或回滚)事务。我还希望在 B.method2 中使用相同的事务。

从 B.method2 中抛出一个 RuntimeException。这是默认情况下为 rollbackFor “列出”的异常。异常在A.method1中被捕获,但在离开B.method2时会越过@Transactional的边界。

这是我的问题:(当前)事务是否会被标记为回滚?

最佳答案

默认传播模式是REQUIRED,method2 将使用为method1 启动的事务。在异常情况下,此事务将被标记为回滚,因此不会向数据库提交任何内容。你可能会在 method1 之后得到 UnexpectedRollbackException

这不是期望的行为,因为启动事务(拥有它)的代码应该控制回滚/提交。我会重新组织您的代码以避免这种可能性。

关于Java Spring : Understanding @Transactional rollbackFor and transaction demarcation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9224897/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com