HIBERNATE 的乐观锁@VERSION和 MYSQL 的两个小问题
来源:互联网 发布:有了源码怎么架设游戏 编辑:程序博客网 时间:2024/06/01 23:02
MySQL的设计者一直没有支持精度到毫秒或者纳秒的Timestamp类型,过去一直只能支持到秒。这虽然不太方便但是也凑合着能用,比如我通过程序代码插入long int也可以。但是Hibernate的实体如果用了@Version在MySQL一个时间字段上做乐观锁,就有问题了。Hibernate比较实体对象是否改变过,是根据@version字段的值,由于MySQL的DATETIME类型不能包含毫秒,纳秒,所以比较的时候会有问题,导致Hibernate认为实体Version不相等,抛HibernateOptimisticLockingFailureException给你。
MySQL 6 才会支持毫秒,所以目前你只能用INT或者BIGINT来保存Version了。
但是就算是你用了INT你可能仍然遇到别的错误
Caused by: java.lang.NullPointerException
at org.hibernate.type.IntegerType.next(IntegerType.java:59)
at org.hibernate.engine.Versioning.increment(Versioning.java:108)
at org.hibernate.event.def.DefaultFlushEntityEventListener.getNextVersion(DefaultFlushEntityEventListener.java:365)
at org.hibernate.event.def.DefaultFlushEntityEventListener.scheduleUpdate(DefaultFlushEntityEventListener.java:257)
at org.hibernate.event.def.DefaultFlushEntityEventListener.onFlushEntity(DefaultFlushEntityEventListener.java:128)
这个错误一看就头大了吧,Hibernate的源代码是这样的
public Object next(Object current, SessionImplementor session) {
return new Integer( ( (Integer) current ).intValue() + 1 );
}
初步分析原因是前面事件通知的时候传入的当前version是空的,具体看这里 http://opensource.atlassian.com/projects/hibernate/browse/HHH-3030
最简单的解决办法是给@version字段在数据库里设置一个默认值,比如0
Opensource意味着你不能发现bug的时候打电话对售后大喊大叫,没办法,要么自己写一个hotfix,要么等官方fix吧。
- HIBERNATE 的乐观锁@VERSION和 MYSQL 的两个小问题
- 乐观锁-version的使用
- Hibernate的悲观锁和乐观锁
- hibernate的 悲观锁和乐观锁
- Hibernate的悲观锁和乐观锁
- hibernate的悲观锁和乐观锁
- Hibernate的悲观锁和乐观锁
- Hibernate的悲观锁和乐观锁
- Hibernate的悲观锁和乐观锁
- Hibernate的悲观锁和乐观锁
- Hibernate的悲观锁和乐观锁
- Hibernate 的悲观锁和乐观锁
- Hibernate的悲观锁和乐观锁
- hibernate的悲观锁和乐观锁
- MySQL的两个小问题
- mysql的两个小问题
- Hibernate乐观锁之Version
- Hibernate学习:乐观锁version
- iOS-计算两个日期的时间间隔
- MacOS10.11 brew无法使用解决办法
- frame和bounds的区别
- Xcode实时渲染——@IBDesignable
- Codeforces 609B The Best Gift 【水题】
- HIBERNATE 的乐观锁@VERSION和 MYSQL 的两个小问题
- Hibernate与Mysql 5.5创建表出错--table doesn't exist
- Ant+jmeter配置
- Android之.XML布局
- MmGetSystemRoutineAddress和MiFindExportedRoutineByName函数的实现代码
- stat函数讲解
- CSS3:伪对象选择器
- Zlib库的使用实现对zip文件的解压缩(二)
- 新浪实时股票数据接口http://hq.sinajs.cn/list=code