1
回答
关于JFinal2.0中Service层中使用Tx事务不回滚的疑惑
华为云数据库免费试用   

@JFinal  

看到JFinal升级到2.0后,就马上从1.9升级过来了。作为一个飞一样的框架,Mode融合了ORM+Model的功能,Controller简化了Restful风格的MVC流转控制。已经很完美的轻量级了。

但是,考虑到中大型项目的业务复杂度,需要把部分功能提取出来放到Service里供Controller层使用。当然,其中免不了要用到事务的控制。

public class AdminService {
	Logger log = LoggerFactory.getLogger(AdminService.class);
	
	@Before(Tx.class) 
	public void doMenRole(String rid) {
		//清空
		Db.update("DELETE from s_rolesmenus where rid = ?",rid);
		
		//事务测试
		Db.update("DELETE from s_rolesmenus where afdsfadsfadsfdsf ");
	}
}

测试后,发现异常报了,rid的数据也删除了,就是没有回滚。




举报
后海
发帖于3年前 1回/2K+阅
共有1个答案 最后回答: 3年前

     使用 enhance 方法对 Service 进行过增强没有? jfinal 2.0 手册有一章专门讲拦截器触发的,对于控制层来说拦截器触发是自动的,对于业务层来说需要先进行 enhance,或者 Duang.duang(AdminService.class)。

     另外,要注意事务级别,jfinal 默认事务级别是 2,如果有从数据库读取的操作也在事务中,需要将事务级别至少提升到 4,通过 arp.setTransactionLevel(4) 即可设置

--- 共有 3 条评论 ---
JFinal回复 @天null下 : 在 jfinal.com 官方下载相关的包 3年前 回复
天null下我的jfinal项目中 使用Duang.duang()、 Enhancer.enhance() 找不到包 3年前 回复
后海我以为加了Tx注解以后,不强制使用Duang.duang。问题解决了,多谢詹总。 3年前 回复
顶部