部分代码如下
其中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() ;再确认一下@Before(Tx.class)是否是用在Controller之上的@Before(Tx.class)注释必须是加载Controller之上的吗?
手动捕获异常的时候,要继续抛出,jfinal事务才能继续工作,否则不抛出异常,他会认为这个操作是正确的!
或者你手动回滚也成:
DbKit. getConfig().getConnection().rollback() ;
正确做法是不是去掉try{}catch()就可以了?
这样异常就会正常抛出
notrycatchnothrows版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。