开发者社区> 问答> 正文

加了Tx.class 后,事务不回滚?报错

部分代码如下

其中public static final HydLoan dao = new HydLoan();

@Before(Tx.class)
   public void agreementSave() throws Exception{
    try{
     HydLoan hydLoan = HydLoan.dao.getHydLoan(loan_id);
     hydLoanLog.set("ID", Util.getUUID());
     hydLoanLog.set("loan_id", loan_id);
     hydLoanLog.set("user_id", user_id);
     hydLoanLog.set("realname", realname);
     hydLoanLog.set("bf_loan_status", HydContent.FULL_LOAN);
     hydLoanLog.set("result_status", "CURRENT_PASS");
     hydLoanLog.set("audit_remark", "借贷合同签订");
     hydLoanLog.set("ctime", Util.getFormatDate());
     
     hydLoanLog.save();
     
     hydLoan.set("bf_loan_status", HydContent.SECOND_WAIT_ACCOUNTING);
     hydLoan.set("credit_loan_status", HydContent.SECOND_WAIT_ACCOUNTING);
     hydLoan.set("result_status", "CURRENT_PASS");
     hydLoan.set("back_reason", "借贷合同签订");
     hydLoan.set("desc", "借贷合同签订");     
     hydLoan.update();
    }catch(Exception e){

    throw new Exception("出错了");
    

     }

标红的地方,其实数据库中没有该字段,这必然报错,可是第一个表中却成功插入数据了,第2个表中,却没有修改成功,这是为什么哦?为啥事务没有回滚成功呢?

另外数据库引是 innodb

展开
收起
爱吃鱼的程序员 2020-06-14 17:12:58 487 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    手动捕获异常的时候,要继续抛出,jfinal事务才能继续工作,否则不抛出异常,他会认为这个操作是正确的!

    或者你手动回滚也成:

    DbKit.
     
      getConfig().getConnection().rollback()
      
       ;
      
     

    引用来自“aqu”的评论

    手动捕获异常的时候,要继续抛出,jfinal事务才能继续工作,否则不抛出异常,他会认为这个操作是正确的!

    或者你手动回滚也成:

    DbKit.
       
        getConfig().getConnection().rollback()
        
         ;
        
       
    再确认一下@Before(Tx.class)是否是用在Controller之上的@Before(Tx.class)注释必须是加载Controller之上的吗?

    引用来自“aqu”的评论

    手动捕获异常的时候,要继续抛出,jfinal事务才能继续工作,否则不抛出异常,他会认为这个操作是正确的!

    或者你手动回滚也成:

    DbKit.
        
         getConfig().getConnection().rollback()
         
          ;
         
        

    正确做法是不是去掉try{}catch()就可以了?

    这样异常就会正常抛出

    notrycatchnothrows
    如果对事务方面比较关心可以看下http://my.oschina.net/idreamblue/blog/388875

    引用来自“JFinal”的评论

    再确认一下@Before(Tx.class)是否是用在Controller之上的注意一下事务级别,调高到4,还要注意一下引擎是否为InnoDB

    引用来自“天王盖地虎626”的评论

    引用来自“JFinal”的评论

    再确认一下@Before(Tx.class)是否是用在Controller之上的
    2020-06-14 17:13:16
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载