JFINAL TX.CLASS 事务报错?报错-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

JFINAL TX.CLASS 事务报错?报错

爱吃鱼的程序员 2020-06-08 15:42:50 82

请教下 

@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)

分享到
取消 提交回答
全部回答(1)
  • 爱吃鱼的程序员
    2020-06-08 15:43:05

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

    非常感谢。。。
    0 0
云计算
使用钉钉扫一扫加入圈子
+ 订阅

时时分享云计算技术内容,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。

推荐文章