开发者社区> 问答> 正文

JFINAL TX.CLASS 事务报错?报错

请教下 

@Before(Tx.class)
    public int cg_save(Blno blno,List<Cntr> ltcntr,List<Cntr_gp> ltcntr_gp){
        try{
            //blno.set("seq_id", "SEQ_CG_BLNO.nextval");
            blno.save();
            for(Cntr cntr :ltcntr){
                //cntr.set("seq_id", "SEQ_CG_CNTR.nextval");
                cntr.save();
            }
            for(Cntr_gp cntr_gp :ltcntr_gp){
                //cntr_gp.set("seq_id", "SEQ_CG_CNTR_GP.nextval");
                cntr_gp.save();
            }
            return 1;
        }catch(Exception e){
            e.printStackTrace();
            return -99;
        }
    }

 

com.jfinal.plugin.activerecord.ActiveRecordException: java.sql.SQLException: ORA-01453: SET TRANSACTION 必须是事务处理的第一个语句

    at com.jfinal.plugin.activerecord.tx.Tx.intercept(Tx.java:84)
    at com.jfinal.aop.Invocation.invoke(Invocation.java:67)
    at com.jfinal.aop.Callback.intercept(Callback.java:96)
    at com.coscon.service.DepositService$$EnhancerByCGLIB$$fa16ee2f.cg_save(<generated>)
    at com.coscon.controller.DepositController.cg_save(DepositController.java:36)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at com.jfinal.aop.Invocation.invoke(Invocation.java:73)

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

    Tx拦截器中通过感知异常来回滚事务的,所以在catch块中需要将异常再次抛出才能回滚事务。如果不希望这么用,可以用一下Db.tx(...)来做事务,可以不依赖于感知异常来回滚事务,只需要returnfalse就可以回滚 

    非常感谢。。。
    2020-06-08 15:43:05
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

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