加了Tx.class 后,事务不回滚? 400 报错
部分代码如下
其中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
手动捕获异常的时候,要继续抛出,jfinal事务才能继续工作,否则不抛出异常,他会认为这个操作是正确的!
或者你手动回滚也成:
DbKit.getConfig().getConnection().rollback();######
手动捕获异常的时候,要继续抛出,jfinal事务才能继续工作,否则不抛出异常,他会认为这个操作是正确的!
或者你手动回滚也成:
DbKit.getConfig().getConnection().rollback();
手动捕获异常的时候,要继续抛出,jfinal事务才能继续工作,否则不抛出异常,他会认为这个操作是正确的!
或者你手动回滚也成:
DbKit.getConfig().getConnection().rollback();
正确做法是不是去掉try{}catch()就可以了?
这样异常就会正常抛出
######no try catch no throws比如我是这样用的:
@Before(AuthInterceptor.class)
public class MyCreditManagerAction extends BoxAction {
@Before(Tx.class)
public void updateCreditInfo() throws Exception{
try{
。。。
hydLoanLog.save();
。。。
hydLoan.save();
}catch(Exception e){
throw new Exception("出错了");
}
}
}
我目前的情况,类似这样的写法,如果第2个操作数据库出现错误,但是第一个操作数据库正常的话,发现数据保存成功了第一个,却没有一起回滚到初始状态。
######注意一下事务级别,调高到 4 ,还要注意一下引擎是否为 InnoDB######比如我是这样用的:
@Before(AuthInterceptor.class)
public class MyCreditManagerAction extends BoxAction {
@Before(Tx.class)
public void updateCreditInfo() throws Exception{
try{
。。。
hydLoanLog.save();
。。。
hydLoan.save();
}catch(Exception e){
throw new Exception("出错了");
}
}
}
我目前的情况,类似这样的写法,如果第2个操作数据库出现错误,但是第一个操作数据库正常的话,发现数据保存成功了第一个,却没有一起回滚到初始状态。
从图片上看,应该是InnoDB,而且事务级别也是4
ActiveRecordPlugin arp = new ActiveRecordPlugin("otherConfig",druidPlugin);
arp.setTransactionLevel(4);但是事务回滚就是没有效果,而且甚至debug了Tx.java类,程序也确实走到了conn.rollback();
理论上说,我的代码写法应该没有问题,已经起到事务效果了,但是,数据库里数据依然不能保持一致,难不成,数据库这边还有什么要调整吗?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。