关于JFinal事务回滚及Service层事务回滚问题

发布于 2021-11-29 02:06:12 字数 1761 浏览 892 评论 4

@JFinal 波总,今天用最新版2.2写了一段事务回滚的代码,结果事务没有进行回滚,关于JFinal的事务回滚,虽然看了文档,但是一直有种模糊的感觉。以下是我的测试代码(我的两个表都是InnoDB引擎):

Controller:

public class TestController extends Controller {

	public void index(){
		BlogService blogService = Duang.duang(BlogService.class,Tx.class);
		boolean isSuc = blogService.save("1");
		renderText("Test:"+isSuc);
	}
}



Service:

public class BlogService {

	@Before(Tx.class)
	public boolean save(){
		boolean succeed = Db.tx(new IAtom(){
			public boolean run() throws SQLException {
				Test test = new Test();
				Blog blog = new Blog();
				test.set("test", "测试事务");
				blog.set("blogtitle", "测试事务标题一定要长测试事务标题一定要长测试事务标题一定要长测试事务标题一定要长").set("blogtime", "2016-05-05");
				boolean testSuc = test.save();
				boolean blogSuc = blog.save();
				return testSuc && blogSuc;
			}
		});
		return succeed;
	}
	@Before(Tx.class)
	public boolean save(String param){
		try{
			Test test = new Test();
			Blog blog = new Blog();
			test.set("test", "测试事务");
			blog.set("blogtitle", "测试事务标题一定要长测试事务标题一定要长测试事务标题一定要长测试事务标题一定要长").set("blogtime", "2016-05-05");
			boolean testSuc = test.save();
			boolean blogSuc = blog.save();
			return testSuc && blogSuc;
		}catch(Exception e){
			e.printStackTrace();
		}
		return false;
	}
}



其中调用Service无参save()方法,无论在哪一层,事务都可以回滚,但是有参save(String param)方法事务不能回滚。请各位帮忙分析一下。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

柒夜笙歌凉 2021-12-02 07:44:53

还是
@jfinal 回答专业。 第一个是嵌套了2个事务方法

噩梦成真你也成魔 2021-12-02 07:01:00

如果我不进行try catch,那save(String param)方法报错,页面进入500错误页面,这种情况怎么处理呢?事务回滚之后肯定也是要有友好提示啊。

葬花如无物 2021-12-02 06:24:33

第二个当然是不会回滚  你都try,catch异常,就表示 对于事务来说内部代码忽略这个异常,等于没有异常,没有异常当然不会滚 这个是基础,不是jfinal的问题

悟红尘 2021-11-29 17:45:30

"完全有必要弄成三层,但愿在这里只是个测试" 应该是"完全没有必要..."吧

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文