- 爱易网页
 
                        - 
                            数据库教程
 
                        - 事宜的传播行为和隔离级别 
 
                         
                    
                    
                    日期:2014-05-16  浏览次数:20552 次 
                    
                        
                         事务的传播行为和隔离级别
    PROPAGATION_REQUIRED
PROPAGATION_SUPPORTS
PROPAGATION_MANDATORY
PROPAGATION_REQUIRES_NEW
 .
 
一。Spring在TransactionDefinition接口中规定了7种类型的事务传播行为,它们规定了事务方法和事务方法发生嵌套调用时事务如何进行传播: 
表1事务传播行为类型 
事务传播行为类型说明 
1.PROPAGATION_REQUIRED 
如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。这是最常见的选择。 
2.PROPAGATION_SUPPORTS 
支持当前事务,如果当前没有事务,就以非事务方式执行。 
3.PROPAGATION_MANDATORY 
使用当前的事务,如果当前没有事务,就抛出异常。 
4.PROPAGATION_REQUIRES_NEW 
新建事务,如果当前存在事务,把当前事务挂起。 
5.PROPAGATION_NOT_SUPPORTED 
以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。 
6.PROPAGATION_NEVER 
以非事务方式执行,如果当前存在事务,则抛出异常。 
7.PROPAGATION_NESTED 
如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与PROPAGATION_REQUIRED类似的操作。 
当使用PROPAGATION_NESTED时,底层的数据源必须基于JDBC 3.0,并且实现者需要支持保存点事务机制。 
<!--Hibernate事务管理器--> 
<bean id="transactionManager" 
   class="org.springframework.orm.hibernate3.HibernateTransactionManager"> 
   <property name="sessionFactory"> 
    <ref bean="sessionFactory" /> 
   </property> 
</bean> 
<!-- 定义事务拦截器bean--> 
<bean id="transactionInterceptor" 
   class="org.springframework.transaction.interceptor.TransactionInterceptor"> 
   <!-- 事务拦截器bean需要依赖注入一个事务管理器--> 
   <property name="transactionManager" ref="transactionManager" /> 
   <property name="transactionAttributes"> 
    <!-- 下面定义事务传播属性--> 
    <props> 
     <prop key="save*">PROPAGATION_REQUIRED</prop> 
     <prop key="find*">PROPAGATION_REQUIRED,readOnly</prop> 
     <prop key="delete*">PROPAGATION_REQUIRED</prop> 
     <prop key="update*">PROPAGATION_REQUIRED</prop> 
     <prop key="*">PROPAGATION_REQUIRED</prop> 
    </props> 
   </property> 
</bean> 
<bean id="managerTemplate" abstract="true" lazy-init="true"> 
<property name="teamDao"> 
   <ref bean="teamDao" /> 
</property> 
<property name="studentDao"> 
   <ref bean="studentDao" /> 
</property>     
</bean> 
<bean id ="manager" class="com.zd.service.impl.Manager" parent="managerTemplate" />
 
<!-- 定义BeanNameAutoProxyCreator--> 
    <bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
      <!-- 指定对满足哪些bean name的bean自动生成业务代理 --> 
     <property name="beanNames"> 
            <!-- 下面是所有需要自动创建事务代理的bean--> 
            <list> 
                <value>manager</value> 
            </list> 
            <!-- 此处可增加其他需要自动创建事务代理的bean--> 
     </property> 
        <!-- 下面定义BeanNameAutoProxyCreator所需的事务拦截器--> 
        <property name="interceptorNames"> 
            <list> 
             &nbs
                        
                     
                    
                    
                        免责声明: 本文仅代表作者个人观点,与爱易网无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。