spring中对于事务的注解配置可以使用两种方式,一种是
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="create*">
<tx:method name="save*">
<tx:method name="delete*">
<tx:method name="*" read-only="true">
<tx:method name="*" rollback-for="Exception">
</tx:attributes>
</tx:advice><bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory"> </bean>
<aop:config>
<aop:advisor pointcut="execution(* ..service.*Manager.(..))" advice-ref="txAdvice">
</aop:config>
@Transactional(readOnly=true)
public class ServiceImpl implements Service {
// ...
}
<!---->
<tx:annotation-driven transaction-manager="transactionManager">
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory">
</bean>
我的测试代码跟楼主你的类似。
我贴一下错误,当我给类加上注解的时候会报这个错:
xception in thread "main" org.springframework.dao.InvalidDataAccessApiUsageException: Write operations are not allowed in read-only mode (FlushMode.NEVER/MANUAL): Turn your Session into FlushMode.COMMIT/AUTO or remove 'readOnly' marker from transaction definition.
去掉呢。就没事了。我的定义里把save等设置为非read-only,跟你的一样。
故证明:注解比XML配置优先级要高。
我觉得应该是第二种
毕竟第二种是直接在代码中控制了,当调用这个方法时,事务也就相应的启动了吧
注解比XML配置优先级要高。
经过测试检验。。。楼主可以试试。。。