1.采用集中事务管理 配置如下:
<bean id="txtManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<tx:advice id="txAdvice" transaction-manager="txtManager">
<tx:attributes>
<tx:method name="save*" propagation="REQUIRED" isolation="DEFAULT"/>
<tx:method name="update*" propagation="REQUIRED" isolation="DEFAULT"/>
<tx:method name="delete*" propagation="REQUIRED" isolation="DEFAULT"/>
<tx:method name="batch*" propagation="REQUIRED" isolation="DEFAULT"/>
<tx:method name="load*" propagation="REQUIRED" isolation="DEFAULT" read-only="true"/>
<tx:method name="get*" propagation="REQUIRED" isolation="DEFAULT" read-only="true"/>
<tx:method name="find*" propagation="REQUIRED" isolation="DEFAULT" read-only="true"/>
<tx:method name="*" propagation="REQUIRED" isolation="DEFAULT"/>
</tx:attributes>
</tx:advice>
<aop:config proxy-target-class="true">
<aop:advisor advice-ref="txAdvice" pointcut="execution(* *..*Service.*(..))"/>
</aop:config>
这样以Service结尾的类中的所有方法都会增加事务
2.申明式事务管理
<bean id="txtManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<tx:annotation-driven transaction-manager="txtManager"/>
使用时在需要的类或方法前加入@Transaction注解
3.sessionFactory.getCurrentSession() :No Session found for current thread 问题
Exception in thread "main" org.hibernate.HibernateException: No Session found for current thread
at org.springframework.orm.hibernate4.SpringSessionContext.currentSession(SpringSessionContext.java:106)
at org.hibernate.internal.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:1014)
at com.axent.oa.util.Installer.install(Installer.java:22)
at com.axent.oa.util.Installer.main(Installer.java:63)
在hiberneate.cfg.xml 文件配置 <property name="hibernate.current_session_context_class">thread</property> 项
当配置了这一项通过sessionFactory.getCurrentSession() 获取的session与当前的线程绑定了 所以在tomcat容器外调用启动spring容器时事务需要手动开启
spring中的事务将不会生效
所以在使用容器管理事务时不需配置<property name="hibernate.current_session_context_class">thread</property>