hibernate事务控制之timestamp问题

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/buyaore_wo/article/details/50475681

hibernate事务并发控制机制在这儿不讲了,有兴趣参看:  https://docs.jboss.org/hibernate/orm/3.5/reference/zh-CN/html/transactions.html#transactions-optimistic

http://blog.csdn.net/qjyong/article/details/1874599


这里我们说下遇到的问题和解决方法

先说下环境: hibernate3 mysql5.1 spring3.2

特意给mysql5.1加红色,因为问题和这个数据库版本有关系, mysql5.7(有待考证)以下版本中timestamp类型的精度为1秒

当两个事务同时在一秒内操作同一条记录,并都在一秒内完成操作(一秒内是指,如果以毫秒来说的话就是一秒开始的0毫秒到一秒结束的1000毫秒),这时两个事务都会成功,因为hibernate更新前比较版本不会微发现有问题,因为时间精度为一秒两个事务提交时时间都还在事务开始前的那一秒

解决办法: 

1.升级mysql到5.7

2.将用于版本控制的timestamp列类型改为Integer(或其它hibernate支持的数字类型), 修改orm PoJo相应属性类型为java.lang.Integer


展开阅读全文

没有更多推荐了,返回首页