前天遇到一个以前从没见过的怪异问题,无论用hibernate的那种查询方法都无法执行一个单表查询(最后排查出其他表关联了此表,刚开始一直以为是一个单独的表),在执行查询前就开始抛出空值异常(还没有产生SQL语句),异常如下:
java.lang.NullPointerException
at org.hibernate.type.LongType.next(LongType.java:56)
at org.hibernate.engine.Versioning.increment(Versioning.java:25)
at org.hibernate.event.def.DefaultFlushEntityEventListener.getNextVersion(DefaultFlushEntityEventListener.java:353)
at org.hibernate.event.def.DefaultFlushEntityEventListener.scheduleUpdate(DefaultFlushEntityEventListener.java:243)
at org.hibernate.event.def.DefaultFlushEntityEventListener.onFlushEntity(DefaultFlushEntityEventListener.java:114)
at org.hibernate.event.def.AbstractFlushingEventListener.flushEntities(AbstractFlushingEventListener.java:195)
.....
百思不得其解....最后还是czx566兄,贴出一个地址进去翻阅总算找到答案,再次表示感谢 !详见(http://www.iteye.com/topic/310997)
总结:引起此类问题的原因一般存在于hibernate把查询转换为HQL语句的时候,转换中出了异常,引起异常大部分应该是由于类型不匹配引起,如果传的查询参数和查询用法都对,并且此表的数据也没问题,那么引起异常的数据一定在其他关联表里面!上面的异常就是因为在另一张表里面存在一个乐观锁的字段,此字段恰好为null而乐观锁声明的是int结果在进行转换操作的时候就会出现null值异常。(乐观锁字段在建表的时候一定要给个默认值,千万别出现null!)
分享到:
相关推荐
这可能与引发异常的具体业务操作有关,例如在更新商品信息时发生了乐观锁失败。 综上所述,要解决`HibernateOptimisticLockingFailureException`,我们需要理解乐观锁的工作原理,检查和调整业务逻辑,以及在必要时...
- **乐观锁**:假设不会发生并发冲突,仅在提交时检查版本号。 #### 其它问题 - **与JPA的集成**:Hibernate支持Java Persistence API标准,可以通过注解等方式与JPA集成。 - **监听器**:可以注册监听器来监听...
1. 版本控制:Hibernate 使用乐观锁策略,通过在实体类中添加一个版本字段,每次更新对象时,会检查当前版本是否与数据库中的版本一致。如果不一致,则认为有其他线程已经修改了数据,更新操作会被回滚,从而避免了...
因此,需要正确处理并发控制,例如使用乐观锁或悲观锁。 5. 性能优化:OSIV模式可能会增加内存开销,因为Session在整个请求生命周期内都保持打开。为了优化,可以考虑在某些不需要访问数据库的Action中禁用OSIV,...
### Java与数据库事务详解 ...最后,文章讨论了EJB事务模型中的两种事务管理方式以及乐观锁与悲观锁的区别。通过对这些知识点的学习,开发者可以更好地理解和掌握如何在Java应用程序中有效地管理和控制数据库事务。
lock()方法通常用于对持久化对象加上乐观锁机制,而saveOrUpdate()方法则能够处理保存新对象或更新已存在的对象。 了解了这些Java框架方面的面试知识点,对于准备面试的开发者来说,无疑会增加成功的可能性。而这些...
数据库的事务机制可以用来保证数据的一致性,例如可以使用乐观锁或悲观锁来解决并发访问的问题。例如,12306的订票系统需要保证不会发生票超卖的问题,通常会使用数据库事务的机制来保证。 在设计可扩展的系统时,...