jfinal club中并没有配置声明式事务,也未使用任何Tx.class注解,那它是如何保证事务安全的呢?我测试过异常情况,不加tx注释,的确不会回滚。
testTx() { String loginIp = IpKit.(getRequest()); Integer accountId = ; Project project = Project(); project.setId(); project.setAccountId(); project.setName(); project.setTitle(); project.setContent(); project.setCreateAt(Date()); project.save(); Account account = Account(); account.setId(); //primary key异常 account.setCreateAt(Date()); account.setNickName(); account.setUserName(); account.setPassword(); account.setSalt(); account.setIp(loginIp); account.setStatus(); account.setAvatar(); account.save(); renderText(); } action不加 @Before(Tx.class)的话,的确会出异常。加了就可以保证。
在项目中搜索一下 Db.tx 就可以搜得到这些地方
此外,如果你要使用 @Before(Tx.class) 来做事务,通常需要添加一个全局拦截器,拦截 @Before(Tx.class) 抛出的异常,然后根据异常的类型来决定 render(...) 到什么地方,或者 renderJson(...) 什么内容
如果你的项目中有很多地方要使用事务,使用 @Before(Tx.class) 再配合一个全局拦截器会比较方便,否则使用 Db.tx 会更方便