gpt4 book ai didi

java - Hibernate @Transactionl 错误

转载 作者:行者123 更新时间:2023-12-01 23:08:42 26 4
gpt4 key购买 nike

您好,使用 Spring/JPA Hibernate 面临一个奇怪的问题。

我在服务类 methodA()methodB() 中有两个方法

@Transactional
methodA(){
for(){
methodB();
}

some other database operations.
}

@Transactional
methodB(){
database Update/Insert Operations.
save();
}

如上所述,我在循环中从 MethodA 调用 methodB。如果循环中的任何操作失败或循环外的数据库操作失败,我预计事务会回滚,因为 methodA() 本身就是事务。

但是我遇到了奇怪的问题,我看到数据在 methodB() 完成后立即提交到数据库,并且即使在 methodA() 抛出异常后也不会回滚。

我还尝试从methodB()中删除transational,也尝试了propogation = NESTED/REQUIRED/MANDATORY。但似乎没有任何作用。

最佳答案

这不是使用 Spring 时事务的工作方式。事务方法必须从外部调用,而不是在其他方法内调用。原因是,在您的情况下,Spring 无法通过 AOP 代理应用事务,因为对 methodB 的调用直接来自 methodA 并且 Spring 无法在 methodB< 之前应用事务方面 被调用。欲了解更多信息,请查看here在“了解 AOP 代理”部分以及 here在第 10.5.1 节中

关于java - Hibernate @Transactionl 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22370271/

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