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

JohnsonZ 发布于 2014/08/01 21:57
阅读 543
收藏 0

首先 我的数据库 是 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");

}




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