Jfinal事务回滚

Controller代码

public class UserController{

        public void regist(){

                        。。。。。

                        UserService userServiceEnhance = enhance(UserService.class);

         if (!userServiceEnhance.registUser(mobile, invitorUserId)) {

         }

        }

}

Service代码

public class UserService{

        @Before(Tx.class)

public boolean registUser(String mobile, String invitorUserId){

                SysUser user = new SysUser ();

                UserInvite inviteRef = new UserInvite();

                。。。。。

         if (user.save()) {

         inviteRef.set("accept_user_id", user.getStr("ids") );

         }

         boolean inviteRefSuc = inviteRef.save();

         return inviteRef.save();

}

}

user保存成功后,inviteRef保存出错,但是事务没有回滚,哪位好心人来帮我看一下什么原因,非常感谢!




评论区

JFinal

2018-05-31 09:45

有没有抛出异常? @Before(Tx.class) 回滚事务依赖于异常的抛出

JFinal

2018-05-31 09:46

此外,事务操作建议使用我在这个贴子回复中的方法:
http://www.jfinal.com/feedback/3741

Db.tx(...) 做事务可控性更好

1163898600

2018-05-31 11:17

@JFinal 报错:com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column 'accept_user_id' at row 1,没有异常抛出

1163898600

2018-05-31 11:27

@JFinal
改成如下写法
private boolean editUserAndInvitorRef(SysUser user, UserInvite inviteRef) {
boolean succeed = Db.tx(new IAtom() {
@Override
public boolean run() throws SQLException {
user.save();
inviteRef.set("accept_user_id", user.getStr("ids") + "00000000");
inviteRef.save();
return true;
}
});
return succeed;
}
依然没有回滚

1163898600

2018-05-31 11:51

@JFinal 原因找到了,表必须设置为InnoDB引擎时才支持事务,MyISAM并不支持事务。谢谢老大来解答

白小猿

2019-06-26 15:40

事务的文档是第几篇啊 我自己去看看

热门分享

扫码入社