Spring中配置Hibernate事務管理


 

<!-- transationManager -->
<bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
    <property name="sessionFactory" ref="sessionFactory"/>
</bean>
<!-- advice  -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
    <tx:attributes>
        <tx:method name="insert*" propagation="REQUIRED"/>
      <tx:method name="delete*" propagation="REQUIRED"/>
      <tx:method name="update*" propagation="REQUIRED"/>
      <tx:method name="select*" propagation="SUPPORTS"  read-only="true"/>
      <tx:method name="*" rollback-for="java.lang.Exception" timeout="100" />
    </tx:attributes>
</tx:advice>
<aop:config proxy-target-class="true">
    <aop:pointcut id="interceptorPointCuts" expression="execution(public * com.bai.du.*.service.impl.*.*(..))" />
    <aop:advisor advice-ref="txAdvice" pointcut-ref="interceptorPointCuts" />
</aop:config>            

  這里統一規定了service實現類中與事務有關的方法的命名規則,比如新增方法,方法名必須以insert開頭;刪除方法,方法名必須以delete開頭;更新方法,方法名必須以update開頭,查詢方法必須以select開頭,以什么開頭或結尾這可以自定義,只有這樣方法才能被spring的事務管理,為什么要在service層配置事務呢?這是因為service中定義的是業務操作(比如存取款),而這個業務操作可能需要多次操作數據庫,為防止操作數據庫過程中可能會出現部分成功,部分失敗的情況,所以把事務放在service層,這樣只有數據庫操作全部成功(不報異常),整個事務才會提交。

  上面是采用xml配置事務,這樣的好處是僅此一處配置,便可實現所有匹配的事務,事務配置與代碼高度分離,缺點是需要遵循定義的命名規則,還有一種方法就是使用注解,只需要在xml文件中增加:

<tx:annotation-driven transaction-manager="transactionManager"/>

並且在需要事務管理的方法上添加@Transactional()注解(注意是spring包的),()中同樣可以定義propagation,read-only,rollback-for等屬性。注解的優勢是配置比較靈活,xml文件中配置比較簡潔,缺點是需要的地方就必須添加注解,比較繁瑣,而且還增加代碼的耦合。建議使用xml配置方式。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM