jfinal3.5事务回滚

     首先数据库建两张表,如下图所示,用于测试事务是否进行回滚。

 

     (1)正常操作,action路径命名为saveEm,将id值传入25进行保存。成功保存。

controller

        @Inject
	LoginService loginService;
	public void saveEm(){
		
	    int id = getParaToInt("id");
	    try {
		News news = getModel(News.class);
		news.setId(id);
			
		Notice notice = getModel(Notice.class);
		notice.setId(id);
		loginService.ss(news);
		loginService.yy(notice);
	    } catch (Exception e) {
		e.printStackTrace();
	    }

service

package com.legendnet.exam.login;

import com.legendnet.model.News;
import com.legendnet.model.Notice;

public class LoginService {

	
	public boolean ss(News news) throws Exception{
		
		return news.save();
	}
	
	public boolean yy(Notice notice) throws Exception{
		return notice.save();
	}
}

 

(2)将id值传入24,对于表一来说会出现主键冲突所以会抛出异常,经过测试我们发现事务并没有进行回滚。

(3)接下来我们将拦截规则设置为 me.addGlobalServiceInterceptor(new TxByMethodRegex("(.*save.*|.*update.*)"));针对service层进行拦截。经过测试,我们发现依旧没有发生回滚,改造service层如下:

	public boolean save(News news,Notice notice) throws Exception{
	    news.save();
	    notice.save();
	    return true;
	}

改为这样后,我们发现事务进行回滚了。通时测试service层不抛异常,发现事务也进行回滚了。

总结:通过以上示例可以看出,一个action中如果想进行事务处理则必须将后续操作放在同一个service中。jfinal升级到3.5之后,配置了controller 和interceptor层可通过@Inject注解,将service层进行注入。因此建议在开发中编写service层。在service层中进行事务处理。在controller中进行异常捕获即可。

注:如果经过上述测试仍发现事务未进行回滚。请记住jfinal事务是建立在数据表引擎INNODB的基础上。

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Java旅途

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值