请教下
@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)
Tx拦截器中通过感知异常来回滚事务的,所以在catch块中需要将异常再次抛出才能回滚事务。如果不希望这么用,可以用一下Db.tx(...)来做事务,可以不依赖于感知异常来回滚事务,只需要returnfalse就可以回滚
非常感谢。。。版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。