解决方案 »

  1.   

    在哪里开启事务,那就在同一级别进行异常处理/回滚/提交/资源关闭. 楼主是否考虑需要把事务对象从上一层调用的地方作为参数传进来,这样多个循环就是同一个事务,而不是多个事务.
    另外, delete 为什么会有异常,这逻辑上说不通.除非有语法错误,或者连接断开.
      

  2.   

    ........
    Map map = (Map)this.getHibernateTemplate().execute(new HibernateCallback() {

    @Override
    public Object doInHibernate(Session session) throws HibernateException,
    SQLException {
    Map resultMap = new HashMap();
    int result = 1;

    Transaction tx = null;
    try{
    tx = session.beginTransaction();
                                          //循环删除
    for(int i = 0; i < idArr.length; i++){
    int index = 1;
                                             ///执行删除一条数据的存储过程 start
    ProcPara[] paras = new ProcPara[]{
    new ProcPara(index ++, ProcPara.IN, 1, Types.INTEGER),
    new ProcPara(index ++, ProcPara.IN, idArr[i], Types.VARCHAR),
    new ProcPara(index ++, ProcPara.IN, userAccount, Types.VARCHAR),
    new ProcPara(index ++, ProcPara.OUT, Types.INTEGER),
    new ProcPara(index ++, ProcPara.OUT, Types.VARCHAR)
    };
    callStoredProcedure(produrename, paras);
                                                        //执行删除一条数据的存储过程 start                                            
    }
    tx.commit();
    }catch(Exception e){
    if(tx != null){
    resultMap.put("result", 0);
    resultMap.put("message", "删除失败!");
    tx.rollback();
    }
    e.printStackTrace();
    }finally{
    session.close();
    }

    resultMap.put("result", 1);
    resultMap.put("message", "删除成功!"); return resultMap;
    }

    });
    .....
    这样写的问题有哪些,反正不能实现,还报异常:
    org.springframework.transaction.TransactionSystemException: Could not commit Hibernate transaction; nested exception is org.hibernate.TransactionException: Transaction not successfully started......
      

  3.   

    我感觉不能实现,很明显,在每条的存储过程中都有异常和事务处理,我在循环外面应该cacth不到什么异常。这样写还有什么意义。一条存储过程如果出现异常那么输出的result参数值为0,但是我需要将其之前执行成功的存储过程全部回滚,这个怎么实现?