读书人

spring宣言式事物没有起效的原因?

发布时间: 2012-09-07 10:38:15 作者: rapoo

spring声明式事物没有起效的原因??
先看spring配置文件

XML code
<!-- 声明事务 -->    <bean id="txManager"        class="org.springframework.orm.hibernate3.HibernateTransactionManager">        <property name="sessionFactory" ref="sessionFactory"></property>    </bean>    <tx:advice id="txAdvice" transaction-manager="txManager">        <tx:attributes>            <tx:method name="save*" propagation="REQUIRED" />            <tx:method name="del*" propagation="REQUIRED" />            <tx:method name="update*" propagation="REQUIRED" />            <tx:method name="*" propagation="SUPPORTS" read-only="true" />        </tx:attributes>    </tx:advice>    <aop:config>        <aop:pointcut id="pointcut"            expression="execution(* com.service.impl.*.*(..))" />        <aop:advisor advice-ref="txAdvice" pointcut-ref="pointcut" />    </aop:config>



再看service方法
Java code
package com.service.impl;public class UserServiceImpl implements UserService {    private UserDao userDao;    public UserDao getUserDao() {        return userDao;    }    public void setUserDao(UserDao userDao) {        this.userDao = userDao;    }        public void saveUser(USM_USER User) {        this.userDao.saveObject(User);        //做2次插入,按道理第二次会失败,那应该要回滚第一次的插入吧        this.userDao.saveObject(User);    }}



其中userDao继承至BaseDao,底层方法没有把异常抛出,底层自行处理了
详细请看BaseDaoImpl的部分方法
Java code
public Serializable saveObject(E entity) {        Serializable id = null;        try {            id = getHibernateTemplate().save(entity);        } catch (Exception e) {            logger.error("保存实体对象异常,对象是" + entity, e);            return null;        }        return id;    }    public boolean saveOrUpdateObject(E entity) {        try {            getHibernateTemplate().saveOrUpdate(entity);            return true;        } catch (Exception e) {            logger.error("保存或者更新实体对象异常,对象是" + entity, e);            return false;        }    }



为什么配置的事物无效呢??


[解决办法]
探讨
Java code


public void saveUser(USM_USER User) {
try {
System.out.println("====");
System.out.println("====");
this.userDao.saveObject(User);
……

读书人网 >J2EE开发

热点推荐