11

我想了解使用传播支持进行春季交易的用途。java 文档提到,如果@Transactional(propagation = Propagation.SUPPORTS)从事务中调用具有的方法,则它支持该事务,但如果不存在事务,则该方法以非事务方式执行。

这不是春季交易的行为Propagation.SUPPORTS吗?



public class ServiceBean {

    @Transactional(propagation = Propagation.SUPPORTS)
    public void methodWithSupportsTx() {
        //perform some database operations
    }
}

public class OtherServiceBean {

    @Transactional(propagation = Propagation.REQUIRED)
    public void methodWithRequiredTx() {
        //perform some database operations
        serviceBean.methodWithSupportsTx();
    }
}


在上面的代码示例中,无论是否methodWithSupportsTx()@Transactional(propagation = Propagation.SUPPORTS)注释,它都会在事务中执行,具体取决于是否methodWithRequiredTx()@Transactional注释,对吧?

那么拥有传播级别支持的需要/用途是什么?

4

2 回答 2

5

javadoc

注意:对于具有事务同步的事务管理器,PROPAGATION_SUPPORTS 与根本没有事务略有不同,因为它定义了同步将适用的事务范围。因此,相同的资源(JDBC 连接、Hibernate Session 等)将在整个指定范围内共享。请注意,这取决于事务管理器的实际同步配置。

因此,这意味着,例如,HibernateSessionFactory.getCurrentSession()内部的多次调用methodWithSupportsTx()将返回相同的会话。

于 2011-06-22T09:48:02.567 回答
-2

如果不存在,则必需的事务将创建一个新事务。因此,当您调用 serviceBean.methodWithSupportsTx() 时,将创建一个新事务。如果您的方法是真正的事务性方法,如果不存在事务,您将看到来自 spring 的错误。

于 2011-06-22T09:45:34.323 回答