使用HibernateTemplagte发生异常时事务没有回滚

舞黯然 2010-08-15 07:22:36

@Transactional
public class Dao implements DaoIn{
private HibernateTemplate template;
public void save(Student s){
try{
template.save(s);
throw new RuntimeException();
} catch(RuntimeException e) {
e.printStackTrace();
}
}
public HibernateTemplate getTemplate() {
return template;
}
public void setTemplate(HibernateTemplate template) {
this.template = template;
}
}


Action

public class SpringAction extends ActionSupport{
private Student stu = new Student();
private DaoIn dao;
public String execute()throws Exception{
stu.setName("111");
stu.setStuclassid(8);
dao.save(stu);
//this.wait();
return SUCCESS;
}//省略get,set


applicationContext.xml

<tx:annotation-driven/>
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>

<bean id="SpringAction" class="test.web.SpringStruts2Hibernate.Action.SpringAction"
scope="prototype">
<property name="dao" ref="dao" />
</bean>

<bean id="dao" class="test.web.SpringStruts2Hibernate.DAOImpl.Dao">
<property name="template" ref="hibernateTemplate" />
</bean>
<!--省略数据源的配置信息-->


为什么throw new RuntimeException();
抛出异常后事务没有回滚,数据库中还是保存了数据了,是哪里少配置了什么吗?
...全文
247 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhangzhpeng 2012-10-24
  • 打赏
  • 举报
回复
6楼正解
舞黯然 2010-08-15
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 basic13 的回复:]
用hibernate模板的时候是不用捕获异常的
只有当你的操作抛出运行时异常的时候,spring才会帮你回滚
而你自己把异常给处理了,spring自然就不帮你忙了

hibernate模板的一大作用就是不用自己捕获异常并处理了
spring自己帮你处理了
[/Quote]
恩,我也是这么想的。算了,结贴了,也没人回答。
basic13 2010-08-15
  • 打赏
  • 举报
回复
用hibernate模板的时候是不用捕获异常的
只有当你的操作抛出运行时异常的时候,spring才会帮你回滚
而你自己把异常给处理了,spring自然就不帮你忙了

hibernate模板的一大作用就是不用自己捕获异常并处理了
spring自己帮你处理了
舞黯然 2010-08-15
  • 打赏
  • 举报
回复
难道说捕获了异常就不存在异常一说了?也就不会回滚了嘛?希望有高人指点啊
舞黯然 2010-08-15
  • 打赏
  • 举报
回复
哎,可惜没人回答啊,我自己搞定了,用XML,注解都试过了,可以回滚了。
就是不知道为什么加了try...catch以后就不能回滚,去掉以后可以
licip 2010-08-15
  • 打赏
  • 举报
回复
注解的这种方式,没有用过,关注一下。
舞黯然 2010-08-15
  • 打赏
  • 举报
回复
去掉try...catch就可以回滚了,难道异常不需要捕获?
舞黯然 2010-08-15
  • 打赏
  • 举报
回复
自己发现了一个错误,注解写错地方了。不过改了还是有问题,麻烦帮我看看

67,513

社区成员

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

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