6.spring集成hibernate事务管理配置
  <bean id="transactionManager"
  class="org.springframework.orm.hibernate3.HibernateTransactionManager">
  <property name="sessionFactory">
  <ref local="sessionFactory" />
  </property>
  </bean>
  上面是事务管理器,下面配置事务:
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<!-- 方法对应的传播属性 -->
<tx:method name="get*" read-only="true" />
<tx:method name="query*" read-only="true" />
<tx:method name="save*" propagation="REQUIRED"/>
<tx:method name="find*" read-only="true" />
<tx:method name="*" />
</tx:attributes>
</tx:advice>
<!-- 事务控制位置,一哪些类的那些方法参与事务,一般在业务层service -->
<aop:config proxy-target-class="true">
<aop:advisor pointcut="execution(* com.avit.mmsp.padapter.services.*.*(..))"
advice-ref="txAdvice" />
<aop:advisor
pointcut="execution(* com.avit.mmsp.common.message.service.*.*(..))"
advice-ref="txAdvice" />
</aop:config>
  上面的代码表示这个事务的事务管理器为transactionManager,这个advice中规定save的方法的传输方式为required,也是说没有sessionfactory的时候回自动建立,又得时候不会建立了。规定了advice的同时还需要指定一个aop:pointcut去引用它,这样这个advice被联系到这两个pointcut上了。
  关于read-only属性的理解:
  表示该事物为只读事务,在将事务设置成只读后,相当于将数据库设置成只读数据库,此时若要进行写的操作,会出现错误。
  read-only的应用场合:
  如果你一次执行单条查询语句,则没有必要启用事务支持,数据库默认支持SQL执行期间的读一致性;
  如果你一次执行多条查询语句,例如统计查询,报表查询,在这种场景下,多条查询SQL必须保证整体的读一致性,否则,在前条SQL查询之后,后条SQL查询之前,数据被其他用户改变,则该次整体的统计查询将会出现读数据不一致的状态,此时,应该启用事务支持。
  ps:注意是一次执行多次查询来统计某些信息,这时为了保证数据整体的一致性,要用只读事务,关于spring和jdbc中怎样设置事务,请参见博文:
  差不多了,这些,以后再补充