我想了解使用Propagation Supports进行 Spring 交易的用法。 Java文档提到如果从事务内调用具有@Transactional(propagation = Propagation.SUPPORTS)
的方法,则该方法支持该事务,但是如果不存在任何事务,则该方法将以非事务方式执行。
与Propagation.SUPPORTS
无关,这已经是 Spring 交易的行为了吗?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
注释,对吗?
那么,具有传播级别支持的需求/用途是什么?
最佳答案
从javadoc:
因此,这意味着,例如,在SessionFactory.getCurrentSession()
中多次调用Hibernate的methodWithSupportsTx()
将返回同一 session 。
关于带有支持传播的 Spring 交易,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6437828/