4
回答
关于jfinal的事务问题
华为云实践训练营,热门技术免费实践!>>>   

@Jfinal

@Before({Tx.class,DbDesignLogInterceptor.class})
public void add() {
try {
TblInfo tblInfo = getModel(TblInfo.class);
Employe employe = AccountHelper.getEmploye(getRequest());
tblInfo.setCreator(employe.getNick());
tblInfo.setLastModifier(employe.getNick());
tblInfo.setLastModifyTime(new Date());
tblInfo.setCreated(new Date());
tblInfo.save();
long tblId = tblInfo.getId();
FieldInfo fieldInfo = getModel(FieldInfo.class);
fieldInfo.setFieldNameCn("主键");
fieldInfo.setTblId(tblId);
fieldInfo.setCreated(new Date());
fieldInfo.setCreator(employe.getNick());
fieldInfo.setLastModifier(employe.getNick());
fieldInfo.setLastModifyTime(new Date());
fieldInfo.save();
render(MgrJsonRender.success());
} catch (Exception e) {
log.error("添加表信息失败!", e);
render(MgrJsonRender.error());
}
}

如上代码 我的controller中有两个model 同时保存 第二个model保存失败 按理说第一个model应该事务回滚,但第一个model仍然保存成功,请问这个问题怎么解决 ,不能用jfinal的声明事务吗?

举报
zcoder
发帖于2年前 4回/1K+阅
共有4个答案 最后回答: 2年前
  将业务代码放在业务层,AOP 也用在业务层,业务层不使用 try catch,异常会抛到控制层,Tx 拦截器是捕获到异常才回滚事物,你的代码中 catch 后没有再次向外抛出,所以不会回滚事务
--- 共有 4 条评论 ---
JFinal回复 @zcoder : 建议详细看一次 jfinal 手册,业务层 AOP 有例子可以参考,感谢支持 jfinal 发展 2年前 回复
zcoder最近公司要准备换框架 我极力推荐jfinal 已经做了两次演示 还特地做了实例项目 无奈嘴有点笨 尽力吧 2年前 回复
zcoder嗯 明白了 感谢 @Jfinal 2年前 回复
luokery如果业务层有很长的操作, 抛异常回滚很有可能出问题. 2年前 回复

楼主看来一直没理解AOP事务啊。

要有异常才谈得上事务回滚,换句话来说,没有异常的话,还要事务回滚干嘛?没有异常,就表示正常喽,正常就正常喽,该干啥干啥,有啥好回滚的。很简单的一个逻辑啊

--- 共有 1 条评论 ---
zcoder谢谢 我已经明白了 2年前 回复

引用来自“南湖船老大”的评论

楼主看来一直没理解AOP事务啊。

要有异常才谈得上事务回滚,换句话来说,没有异常的话,还要事务回滚干嘛?没有异常,就表示正常喽,正常就正常喽,该干啥干啥,有啥好回滚的。很简单的一个逻辑啊

懂个球!
--- 共有 3 条评论 ---
luokery回复 @宏哥 : 我也觉得aop的事物回滚,特定情况下问题很大. 2年前 回复
宏哥回复 @南湖船老大 : AOP的事务就是脱裤子放屁 2年前 回复
南湖船老大我说的是aop事务的回滚机制,而不是数据库的全部事务。 2年前 回复
顶部