代码如下: 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 表里数据新建成功, 为什么没有回滚呢, 请各位朋友指教 !!!
<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 表里数据新建成功, 为什么没有回滚呢, 请各位朋友指教 !!!
解决方案 »
- weblogic部署web服务错误
- ERROR - Context initialization failed
- spring MVC出错的问题
- 关于下拉框选值的问题
- 请教谁能帮忙讲一下.do是怎么一回事?
- JDBC驱动程序问题,rs.last()不能用,很急~~~~~~~~~~~~~~~~~~~~~~~~
- eclipse+lomboz +tomcat中,编写网页的bean 时,是不是要用JDK 来编译bean的?
- JBuilder8.0开发webservices的问题
- 谁能说说用jbuilder5开发的Ejb企业组件过程(包括Sessionbean和实体Bean)来者有分,分不够可以加
- 有大神帮我解决一下这个小问题吗
- 在jsp页面中怎么实现文本框可随意拉伸?
- 东华合创大家听说过么,待遇怎么样
另外,检查一下UserService是否在com.heping.springtx.service下
public void createUserAndPerson(User user, Person person) {
userDao.create(user);
personDao.create(person);
}中userDao.create(user); 这个是成功的, 但是 personDao.create(person) 这个方法是会出现异常的,我是想把 createUserAndPerson 是作为一个整体的事务来处理,也就是说都成功才提交,有一个失败出现异常就都回滚
public void createUserAndPerson(User user, Person person) {
userDao.create(user);
personDao.create(person);
}中userDao.create(user); 这个是成功的, 但是 personDao.create(person) 这个方法是会出现异常的,我是想把 createUserAndPerson 是作为一个整体的事务来处理,也就是说都成功才提交,有一个失败出现异常就都回滚
<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 表里记录添加成功, 事务没有起作用啊