tanglei528 2010-08-05 11:22
浏览 256
已采纳

@Transactional spring事务

业务bean:
[color=blue]@Transactional[/color]
public class PersonServiceBean implements PersonService {
@Resource private SessionFactory sessionFactory;

public void save(Person person){
sessionFactory.getCurrentSession().persist(person);
     session,persist()
}

public void update(Person person){
    sessionFactory.getCurrentSession().merge(person);
}

[color=red]@Transactional(propagation=Propagation.NOT_SUPPORTED,readOnly=true)[/color]
public Person getPerson(Integer personId){
    return (Person)sessionFactory.getCurrentSession().get(Person.class, personId);
}

public void delete(Integer personId){
    sessionFactory.getCurrentSession().delete(
            sessionFactory.getCurrentSession().load(Person.class, personId));
}

}

spring配置文件:

<aop:aspectj-autoproxy />

<bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource">
    <property name="driverClassName" value="${driveClassName}" />
              <property name="url" value="${url}" />
               <property name="username" value="${username}" />
              <property name="password" value="${password}" />   
              <property name="initialSize" value="${initialSize}"/>   
              <property name="maxActive" value="${maxActive}"/>     
              <property name="maxIdle" value="${maxIdle}"/>         
              <property name="minIdle" value="${minIdle}"/>      
</bean>     

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    <property name="dataSource" ref="myDataSource"/>
    <property name="mappingResources">
        <list>
          <value>com/tank/bean/Person.hbm.xml</value>                              </list>
    </property>
    <property name="hibernateProperties">
        <props>
        <prop key="hibernate.dialect">org.hibernate.dialect.Oracle9Dialect</prop>
            <prop key="hibernate.hbm2ddl.auto">update</prop>                            
            <prop key="hibernate.show_sql">true</prop>                                  
            <prop key="hibernate.format_sql">false</prop>                               
            <prop key="hibernate.cache.use_second_level_cache">true</prop>                  <prop key="hibernate.cache.use_query_cache">false</prop>                    <prop key="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</prop>      
        </props>
    </property>
</bean>

<bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    <property name="sessionFactory" ref="sessionFactory"/>
</bean>


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

<aop:config>
    <aop:pointcut id="myPointCut" expression="execution(* com.tank.service..*.*(..))" />
    <aop:advisor pointcut-ref="myPointCut" advice-ref="txAdvice"/>
</aop:config>

<tx:advice id="txAdvice" transaction-manager="txManager">
    <tx:attributes>
        <tx:method name="get*" read-only="true"/>     
                  <tx:method name="delete*" />                  
                 [color=red] <tx:method name="save*" read-only="true"/>[/color]
                   <tx:method name="update*" />
                  <tx:method name="*" propagation="SUPPORTS"/> 
    </tx:attributes>
</tx:advice>

<bean id="personService" class="com.tank.service.impl.PersonServiceBean"/>

[b]
问题:[/b]
这个方法已经为只读,但仍能保存进数据库
业务bean已经被@Transactional了。
如果我在save()方法上在注明@Transactional(propagation=Propagation.SUPPORTES)的话,可以生效!!
什么原因?貌似管理也有啊!!!

  • 写回答

3条回答 默认 最新

  • iteye_15772 2010-08-05 17:44
    关注

    大哥,你又用@Transactional注解事物,又用aop的expression正则配置方法事务。两者已经冲突了。

    @Transactional在类当中配置全局事务,已经覆盖了你xml文件配置的声明式事物。

    去掉类当中的@Transactional就ok了。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 MATLAB卫星二体模型仿真
  • ¥15 怎么让数码管亮的同时让led执行流水灯代码
  • ¥20 SAP HANA SQL Script 。如何判断字段值包含某个字符串
  • ¥85 cmd批处理参数如果含有双引号,该如何传入?
  • ¥15 fx2n系列plc的自控成型机模拟
  • ¥15 时间序列LSTM模型归回预测代码问题
  • ¥50 使用CUDA如何高效的做并行化处理,是否可以多个分段同时进行匹配计算处理?目前数据传输速度有些慢,如何提高速度,使用gdrcopy是否可行?请给出具体意见。
  • ¥15 基于STM32,电机驱动模块为L298N,四路运放电磁传感器,三轮智能小车电磁组电磁循迹(两个电机,一个万向轮),如何通过环岛的原理及完整代码
  • ¥20 机器学习或深度学习问题?困扰了我一个世纪,晚来天欲雪,能饮一杯无?
  • ¥15 c语言数据结构高铁订票系统