gpt4 book ai didi

java - 当在类和方法中添加带注释的事务时,如何使事务仅在方法中起作用?

转载 作者:行者123 更新时间:2023-11-30 01:48:25 25 4
gpt4 key购买 nike

我参加过一次面试,在面试过程中,被问到了如下问题:当类和一个方法上都添加了@Transactional注解,而其他方法上没有添加@Transactional注解时,怎么办?我只让这个方法的交易有效?

例如:

@Transactional
public class ClassA {

@Transactional
private void methodA() {
}

private void methodB() {
}

private void methodC() {
}
}

那么,如何确保类内的其他事务不生效呢?这个问题的重点是什么?

最佳答案

您可以更改内部事务的传播类型:

@Transactional(propagation = Propagation.REQUIRES_NEW)

这将创建一个新的内部事务并挂起外部事务。如果您需要提交内部事务,但如果其他地方出现任何问题,您仍然需要外部事务回滚,这可能很有用。

我从未使用过类范围的@Transactional,但是propagation属性实际上非常有用。

我在多种情况下使用它来覆盖默认值,Propagation.REQUIRED,它表示:“如果交易尚不存在,则创建一个新交易 - 否则支持根据文档,“当前交易”。

顺便说一句,我正在使用:

org.springframework.transaction.annotation.Transactional

所以如果您使用替代的@Transactional,我的答案不适用

另请注意,内部事务和外部事务的区别是基于 HQL 的,因此您无需担心所使用的 SQL 方言。

关于java - 当在类和方法中添加带注释的事务时,如何使事务仅在方法中起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56974895/

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