HIBERNATE的事务是用SPRING管理,
如果抛出异常,就回滚数据。
有没有办法可以手动回滚这个事务?我遇到一个怪问题,我取出一条记录,设置一个属性,没有做保存操作,数据就存进去了。
比如在一个struts2 action 里面 public String execute(){
  User user=userDao.get(id);
  user.setName("test");
//userDao.save(user);//为何没有这句代码,也能保存数据?
  return SUCCESS;
}public String execute(){
  User user=userDao.get(id);
  user.setName("test");
  throw new RuntimeException("test");//这样可以回滚。有没有什么办法可以手动回滚数据?而不是一定要抛出异常才能回滚
  return SUCCESS;
}
注意:HIBERNATE的事务是用SPRING管理的
如果抛出异常,就回滚数据。有没有办法可以手动回滚这个事务?

解决方案 »

  1.   


         public void rollBack(String hql,int state){
                Session session = this.getCurrentSession();
                Transaction t = session.beginTransaction();
                if(state == 1){
                     session.Query(hql).list;
                     t.commit();
                     return;
                }
                session.delete(hql);
                t.rollBack();
         }这个只是一个思路,希望对你有帮助...
      

  2.   

    可以不把这个事务委托给spring,自己控制
      

  3.   


    public String execute(){
      User user=userDao.get(id);
      user.setName("test");
    //userDao.save(user);//为何没有这句代码,也能保存数据?
      return SUCCESS;
    }这个问题是怎么回事?
    我的事务是控制所有的action类。
      

  4.   

    hibernate管理对象有几种状态,当从数据库取出来后,事物提交就会update这个对象,如果你不想update为什么还要修改它的属性呢?看看你设计是不是有问题,不建议手动回滚事务
      

  5.   

    楼主好好理解一下hibernate中对象的状态吧。