我在应用程序中从4.3.7休眠升级到5.3.7 在 session.flush()操作期间,我开始遇到奇怪的行为。
在我的一笔交易中,我有990多个对象。 所有实体的版本都带有乐观锁定(@Version)。
在刷新过程中,某些对象最终会出现空指针异常。 它发生在版本增量操作期间。 只有具有 Status.SAVING (状态为persistenceContext.reentrantSafeEntityEntries()的EntryEntry状态)的对象才会给出此错误(EntityEntry中的版本号为null)
我再次使用旧版本的Hibernate启动了该应用程序,并且在session.flush()之前,持久上下文中的所有对象都具有 Status.MANAGED 。 因此,我认为问题在于正确处理带有Status.SAVING的EntityEntry的实体。
此外,我不明白为什么以前所有对象都具有带有Status.MANAGED的EntityEntry,而现在,在迁移到休眠5.3.7之后,为什么其中一些对象具有带有Status.SAVING的EntityEntry。在休眠4.3.7中,并非始终设置EntityEntry的版本,但我从未经历过NPE。