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条)

报告相同问题?

悬赏问题

  • ¥100 关于使用MATLAB中copularnd函数的问题
  • ¥20 在虚拟机的pycharm上
  • ¥15 jupyterthemes 设置完毕后没有效果
  • ¥15 matlab图像高斯低通滤波
  • ¥15 针对曲面部件的制孔路径规划,大家有什么思路吗
  • ¥15 钢筋实图交点识别,机器视觉代码
  • ¥15 如何在Linux系统中,但是在window系统上idea里面可以正常运行?(相关搜索:jar包)
  • ¥50 400g qsfp 光模块iphy方案
  • ¥15 两块ADC0804用proteus仿真时,出现异常
  • ¥15 关于风控系统,如何去选择