关于jfinal的事务问题

zcoder 发布于 2016/03/09 16:49
阅读 1K+
收藏 0

@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的声明事务吗?

加载中
1
JFinal
JFinal
  将业务代码放在业务层,AOP 也用在业务层,业务层不使用 try catch,异常会抛到控制层,Tx 拦截器是捕获到异常才回滚事物,你的代码中 catch 后没有再次向外抛出,所以不会回滚事务
JFinal
JFinal
回复 @zcoder : 建议详细看一次 jfinal 手册,业务层 AOP 有例子可以参考,感谢支持 jfinal 发展
zcoder
zcoder
最近公司要准备换框架 我极力推荐jfinal 已经做了两次演示 还特地做了实例项目 无奈嘴有点笨 尽力吧
zcoder
zcoder
嗯 明白了 感谢 @Jfinal
luokery
luokery
如果业务层有很长的操作, 抛异常回滚很有可能出问题.
1
千斤难买春秋醉
千斤难买春秋醉
你把异常吃了,事务的aop捕获不到异常了,自然不会回滚了
1
南湖船老大
南湖船老大

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

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

zcoder
zcoder
谢谢 我已经明白了
0
宏哥
宏哥

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

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

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

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