1
回答
jfinal 要在什么情况下才会回滚呢?
利用AWS快速构建适用于生产的无服务器应用程序,免费试用12个月>>>   

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

}




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