本帖最后由 he1106 于 2011-12-01 10:27:38 编辑

解决方案 »

  1.   

    一个事物中可以执行两条update语句
      

  2.   

    平时都是这样 getHibernateTemplate().save(entity); 保存的,请问怎么手动开启事务
      

  3.   

    开始事务
    session.beginTransaction(); 
    提交事务
    session.getTransaction().commit();
    回滚
    session.getTransaction().rollback();

      

  4.   

    这有什么关系了
    public String doSave(Credituser dto) {
    String msg = "";
    // TODO Auto-generated method stub
    session = HibernateSessionFactory.getSession();
    Transaction ts = null;
    try {
    ts = session.beginTransaction();
    if (dto.getCreateperson().length() > 5) {
    dto.setCurcreditamount(dto.getCreditlimit());
    session.save(dto);
    session.flush();
    Creditadjustlog adjust = new Creditadjustlog();
    adjust.setAdjperson(dto.getCreateperson());
    adjust.setAdjtime(dto.getCreatetime());
    adjust.setCreditamount("0");
    adjust.setCuramount("0");
    adjust.setWarnamount("0");
    adjust.setExpiretime("");
    adjust.setCreditseq(dto.getCreditseq().toString());
    session.save(adjust);
    session.flush();
    String sql01 = "insert into creditadjustlog(adjustseq,adjtime,adjperson,creditamount,curamount,warnamount,expiretime,creditseq)"
    + " select SEQ_ADJUST_ID.NEXTVAL,'"
    + dto.getCreatetime()
    + "','"
    + dto.getCreateperson()
    + "',curcreditamount,creditlimit,warnamount,expiretime,creditseq from credituser where credituserno='"
    + dto.getCreateperson() + "'";
    session.createSQLQuery(sql01).executeUpdate();
    session.flush();
    String sql02 = "update credituser set creditlimit=to_char(to_number(creditlimit)-"
    + Integer.parseInt(dto.getCreditlimit())
    + ") where credituserno='"
    + dto.getCreateperson()
    + "'";
    session.createSQLQuery(sql02).executeUpdate();
    session.flush();
    } else {
    dto.setCurcreditamount(dto.getCreditlimit());
    session.save(dto);
    session.flush();
    Creditadjustlog adjust = new Creditadjustlog();
    adjust.setAdjperson(dto.getCreateperson());
    adjust.setAdjtime(dto.getCreatetime());
    adjust.setCreditamount("0");
    adjust.setCuramount("0");
    adjust.setWarnamount("0");
    adjust.setExpiretime("");
    adjust.setCreditseq(dto.getCreditseq().toString());
    session.save(adjust);
    session.flush();
    } ts.commit();
    msg = "0";
    } catch (Exception e) {
    System.out.println("insert  error:  " + e.getMessage());
    if (ts != null) {
    ts.rollback();
    }
    msg = "error";
    } finally {
    HibernateSessionFactory.closeSession();
    }
    return msg;
    }