spring事务遇到异常不回滚

yanweimin5 2009-03-11 07:54:53
测试代码:
ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
StudentDAOI studao = (StudentDAOI)app.getBean("studentDaoProxy");
studao.save(student);

save方法:
public void save(Student student) {
getHibernateTemplate().save(student);
throw new RuntimeException("aaaaaa");
}

配置如下:

<bean id="studentDaoProxy"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<!-- <property name="proxyTargetClass">-->
<!-- <value>true</value>-->
<!-- </property>-->
<property name="proxyInterfaces">
<value>com.jwgl.vo.StudentDAOI</value>
</property>
<property name="target">
<ref bean="StudentDAO" />
</property>
<property name="transactionManager">
<ref bean="transactionManager" />
</property>
<property name="transactionAttributes">
<props>
<prop key="save">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>

不抛异常的时候能够正常插入数据: 抛出运行时异常是报错如下:

Exception in thread "main" java.lang.RuntimeException: aaaaaa
at com.jwgl.vo.StudentDAO.save(StudentDAO.java:33)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:304)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
at $Proxy1.save(Unknown Source)
at com.jwgl.test.StudentDaoTest.main(StudentDaoTest.java:24)
...全文
272 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
yanweimin5 2009-03-13
  • 打赏
  • 举报
回复
试了一下,确实没保存。如果我取消事务配置的话,则保存一条,那是不是说明当配置了spring事务的时候由spring管理事务
没有配置的时候由hibernateTemplate管理事务呢?
licip 2009-03-13
  • 打赏
  • 举报
回复
你这样吧
getHibernateTemplate().save(student);
int i = 0;
if(i == 0)
throw new RuntimeException("aaaaaa");
getHibernateTemplate().save(student);
试试!应该两个都没有保存进去的.
yanweimin5 2009-03-13
  • 打赏
  • 举报
回复
非常感谢各位。
acai9527 2009-03-13
  • 打赏
  • 举报
回复
mark
老紫竹 2009-03-13
  • 打赏
  • 举报
回复
呵呵,当然了!
彩虹咖啡 2009-03-11
  • 打赏
  • 举报
回复
因为这句话getHibernateTemplate().save(student);中,getHibernateTemplate()方法里事务已经提交了
后来跑的异常和保存方法中的事物没有关系,所以他不会回滚,不知道你有没有听懂我的意思

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧