开发者社区 问答 正文

jfinal 要在什么情况下才会回滚呢??报错

首先 我的数据库 是 mysql  InnoDB  @Jfinal

代码中我故意设置  code 的数值 超过 int 类型  数据库 会报错  

 "com.mysql.jdbc.MysqlDataTruncation: Data truncation: Out of range value for column 'code' at row 1"
两种方式 第一个更新都成功了, 是不是事务不是这么写的?


@Before({Tx.class})
	public void cash() {
			Award.dao.findById(14).set("haveReceiveCount", 1).update();
			User.dao.findById(6).set("code", "1234566778999").update();
			//Db.update("UPDATE award set haveReceiveCount=haveReceiveCount+1 where id=14");
			//Db.update("UPDATE user set code=1234566778999 where id=6");

}




展开
收起
爱吃鱼的程序员 2020-06-15 19:30:45 545 分享 版权
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    前面两行代码涉及到数据读到了内存,然后再写回数据库,默认的事务级别已经不能满足要求。解决办法一是可以前两句改成第三句一样的Db.update(...)形式,二是可以提升事务级别回复<aclass='referer'target='_blank'>@bibi:是innodb回复<aclass='referer'target='_blank'>@JohnsonZ:如果你用的mysql,必须把表的存储引擎设置为InnoDB不然没法支持事务恩,试过,上面的代码,我注释的两句就是你说的那种吧!确实不行的!事务级别我去试试,谢谢了!前两句改成Db.update(...)的形式你确定试过?ActiveRecordPlugin对象创建的时候可以带事务级别的参数transactionLevel默认是2,改成4试试不是啊,第三第四句那种写法也不能正常使用事务呢,我两种都试过了然后提升事务级别要如何操作呢?

    2020-06-15 19:31:02
    赞同 展开评论