Работа с устаревшей кодовой базой в Grails. При некоторых условиях (нам неясно, что именно) мы получаем таинственный NPE, след стека, как показано ниже, при выполнении findBy.
До сих пор мы были в тупике; это появляется на нескольких форумах для Hibernate, но ответы, похоже, сводятся к «что-то не так с вашей схемой». Было бы замечательно найти некоторые дополнительные детали, которые помогут нам отследить проблему.
Обновление
Спасибо за ответ. Да, ясно, что в тот момент, когда происходит этот NPE, version
равен null
. Проблема в том, что когда мы смотрим на это в коде, это , а не null
.
Мы начали подозревать, что есть проблема с многопоточностью.
Caused by: java.lang.NullPointerException
at org.hibernate.type.LongType.next(LongType.java:79)
at org.hibernate.engine.Versioning.increment(Versioning.java:131)
at org.hibernate.event.def.DefaultFlushEntityEventListener.getNextVersion(DefaultFlushEntityEventListener.java:387)
at org.hibernate.event.def.DefaultFlushEntityEventListener.scheduleUpdate(DefaultFlushEntityEventListener.java:279)
at org.hibernate.event.def.DefaultFlushEntityEventListener.onFlushEntity(DefaultFlushEntityEventListener.java:151)
at org.hibernate.event.def.AbstractFlushingEventListener.flushEntities(AbstractFlushingEventListener.java:219)
at org.hibernate.event.def.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:99)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:49)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1027)
at org.codehaus.groovy.grails.plugins.quartz.listeners.SessionBinderJobListener.jobWasExecuted(SessionBinderJobListener.java:58)
at org.quartz.core.QuartzScheduler.notifyJobListenersWasExecuted(QuartzScheduler.java:1910)