2010-05-02 68 views
9

我有一个关于春季交易传播的问题。如果我使用@Transactional(propagation = Propagation.REQUIRED)来标注方法m1。当执行逻辑输入m1时,如果已有事务,则m1将使用该事务。在m1之后,交易如何?它结束还是仍然打开?(如果我用另一种方法调用m1,并且在调用之后还有其他事情要做)。关于春季交易传播的问题

总之,我想知道何时退出注释方法,交易结束还是仍然开放?

非常感谢。

回答

17

Propagation.REQUIRED(记录here)将创建一个新的事务(如果没有当前线程存在),或者将加入一个现有的事务(如果存在的话)。

当方法退出时,交易将完成(如果输入方法导致交易被创建),或者将保持交易处于开放状态(如果在输入方法时交易已经存在)。换句话说,它是对称的,并且将使线程的事务状态保持与输入方法之前的状态相同。

+0

嗨员工,关于我的问题其他传播水平呢? – 2010-05-02 16:56:00

+0

@Yousui:各种传播水平及其影响记录在我发布的链接中。 – skaffman 2010-05-02 16:58:07

+0

谢谢staffman,仔细阅读你的答案并做一些测试后,我已经理解了春季交易传播策略。非常感谢您的帮助。 – 2010-05-02 17:14:39