代码如下: applicationContext.xml 中 <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref bean="sessionFactory"/>
</property>
</bean>

<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="create*" propagation="REQUIRED" rollback-for="java.lang.Exception"/>
<tx:method name="update*" propagation="REQUIRED" rollback-for="java.lang.Exception" />
<tx:method name="delete*" propagation="REQUIRED" rollback-for="java.lang.Exception" />
<tx:method name="*" read-only="true" />
</tx:attributes>
</tx:advice>

<aop:config>
<aop:pointcut id="allServiceMethod" expression="execution(* com.heping.springtx.service.*.*(..))" />
<aop:advisor pointcut-ref="allServiceMethod" advice-ref="txAdvice" />
</aop:config>  -----------------------------------------------------------------------------------
-----------------------------------------------------------------------------------Service:public class UserServiceImpl implements UserService { private UserDao userDao = null;
private PersonDao personDao = null;

public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}

public void setPersonDao(PersonDao personDao) {
this.personDao = personDao;
}

public void create(User user) {
userDao.create(user);
} public void delete(String id) {
userDao.delete(id);
} public User getUserById(String id) {
return userDao.getUserById(id);
} public List getUsers(String name) {
return userDao.getUsers(name);
} public void update(User user) {
userDao.update(user);
} public void createUserAndPerson(User user, Person person) {
userDao.create(user);
personDao.create(person);
}
}-------------------------------------------
-------------------------------------------测试方法: public void testcreateUserAndPerson() {

User user = new User("heping9572", "456");
                //故意出现字段过长异常,
Person person = new Person(25, "hexxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "ping");

userService.createUserAndPerson(user, person);
}
希望事务能回滚,但是 user 表里数据新建成功, 为什么没有回滚呢, 请各位朋友指教 !!!

解决方案 »

  1.   

    数据成功写入数据库,说明程序运行没有问题,当然不会回滚了。
    另外,检查一下UserService是否在com.heping.springtx.service下
      

  2.   


    public void createUserAndPerson(User user, Person person) {
    userDao.create(user);
    personDao.create(person);
    }中userDao.create(user); 这个是成功的, 但是 personDao.create(person) 这个方法是会出现异常的,我是想把 createUserAndPerson 是作为一个整体的事务来处理,也就是说都成功才提交,有一个失败出现异常就都回滚
      

  3.   


    public void createUserAndPerson(User user, Person person) {
    userDao.create(user);
    personDao.create(person);
    }中userDao.create(user); 这个是成功的, 但是 personDao.create(person) 这个方法是会出现异常的,我是想把 createUserAndPerson 是作为一个整体的事务来处理,也就是说都成功才提交,有一个失败出现异常就都回滚
      

  4.   

    <tx:advice id="txAdvice" transaction-manager="transactionManager"> 
    <tx:attributes> 
    <tx:method name="create*" propagation="REQUIRED" rollback-for="java.lang.Exception"/> 
    <tx:method name="update*" propagation="REQUIRED" rollback-for="java.lang.Exception" /> 
    <tx:method name="delete*" propagation="REQUIRED" rollback-for="java.lang.Exception" /> 
    <tx:method name="*" read-only="true" /> 
    </tx:attributes> 
    </tx:advice> <aop:config> 
    <aop:pointcut id="allServiceMethod" expression="execution(* com.heping.springtx.service.*.*(..))" /> 
    <aop:advisor pointcut-ref="allServiceMethod" advice-ref="txAdvice" /> 
    </aop:config> 也就是service中的 create* 方法的事务传播性是 REQUIRED , 但是我测试的时候 createUserAndPerson 方法中 userDao.create(user);  成功 personDao.create(person);  失败 事务应该回滚啊, 但是现在是 user 表里记录添加成功,  事务没有起作用啊