hibernate 使用@Transactional注解的方法是否可以 Package 在使用相同注解的另一个方法中?

zbsbpyhn  于 2022-11-24  发布在  其他
关注(0)|答案(2)|浏览(163)

我正在使用Micronaut开发基本的CRUD API,其中一个服务(我们称之为#1)调用另一个服务(我们称之为#2),后者又调用CrudRepository的save方法。
为了定义原子工作单元,我使用了@Transactional注解。我应该将#1定义为@Transactional,还是将#2定义为@Transactional,还是将两者都定义为@Transactional?如果我使用@Transactional注解对两者都进行注解,Micronaut将如何处理它们?
到目前为止,我还没能破译注解是如何工作的。

e37o9pze

e37o9pze1#

如果#2可以独立调用,也可以被#1调用,那么两者都应该是@Transactional,其中propagation = Propagation.REQUIRED。因此,如果直接调用#2,则创建事务,而如果调用#1,则为#1创建的事务用于#2。

irtuqstp

irtuqstp2#

为了定义原子工作单元,我使用了@Transactional注解。我应该将#1定义为@Transactional,还是将#2定义为@Transactional,还是将两者都定义为@Transactional?如果我使用@Transactional注解对两者都进行注解,Micronaut将如何处理它们?
不清楚#1中是否存在任何事务行为。如果答案是“是”,那么您的问题的答案也是“是”。如果#1中没有事务行为,那么用@Transactional标记它可能没有意义。
如果您使用@Transactional标记#1,则默认情况下,当#1调用#2时,#2将参与与#1相同的事务。如果#2的传播级别被配置为REQUIRES_NEW,则有可能使这两个事务在单独的事务中操作,但这听起来不像是您所希望的。

相关问题