• <thead id="r5ngm"><option id="r5ngm"></option></thead>

      1. <code id="r5ngm"><menu id="r5ngm"><sub id="r5ngm"></sub></menu></code><code id="r5ngm"></code>
        <strike id="r5ngm"></strike>
      2. <center id="r5ngm"></center><del id="r5ngm"><em id="r5ngm"></em></del>

        <th id="r5ngm"><option id="r5ngm"></option></th><code id="r5ngm"><menu id="r5ngm"><optgroup id="r5ngm"></optgroup></menu></code>
      3. Java培训 Spring事务嵌套的配置方法


          北京动力节点Java培训专家指出,在使用Spring管理Service层事务时,会遇到Service方法事务嵌套的问题。当出现事务无法回滚的情况,我们可以用一种自动的方式来完成回滚。动力节点Java培训专家解答Spring事物嵌套的配制方法。


        Java培训


         

        Spring的事务传递机制

         

        PROPAGATION_REQUIRED 如果当前已经存在一个事物,那么就加入到这个事务中,如果当前没有事物那么久新建一个事物。这是最常见的选择。

        PROPAGATION_SUPPORTS 支持当前事务,如果当前没有事务,就以非事务方式执行。

        PROPAGATION_MANDATORY 使用当前的事务,如果当前没有事务,就抛出异常。

        PROPAGATION_REQUIRES_NEW 新建事务,如果当前存在事务,把当前事务挂起。

        PROPAGATION_NOT_SUPPORTED 以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。

        PROPAGATION_NEVER 以非事务方式执行,如果当前存在事务,则抛出异常。

        PROPAGATION_NESTED 如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与 PROPAGATION_REQUIRED 类似的操作。

         

            事务传递机制,有PROPAGATION_NESTED机制。

         

            当我们在Service方法中配置了这个方式

         

        @Transactional(propagation=Propagation.NESTED)

        public void save(Entity entity) {

            //保存实体对象操作

        }

         

            运行之后系统异常, 提示当前配置不支持NESTED事务.

         

            如何解决呢?

         

            HibernateTransactionManager中有isNestedTransactionAllowed的判定。

         

        protected Object doGetTransaction() {

            HibernateTransactionObject txObject = new HibernateTransactionObject();

            txObject.setSavepointAllowed(isNestedTransactionAllowed());

            //...

        }

         

            所以在Hibernate配置中添加nestedTransactionAllowed的配置

         

        <bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">

            <property name="sessionFactory" ref="sessionFactory" />

            <property name="nestedTransactionAllowed" value="true"/>

        </bean>

         

        然后所有的事务都自动使用嵌套事务了,也不需要修改任何service的代码和配置,可以在service方法上去掉(propagation=Propagation.NESTED)这段。

         

        以上就是动力节点的Java培训专家为大家提供的Spring事物嵌套的配制方法。更多资讯尽在动力节点,关注官方微信最新资讯,一手获取。


        上一篇:动力节点老师最低年薪30万?
        下一篇:毕业三年之内能转行学编程吗?

        开班信息

        98彩票登录|官网_首页