Работа с устаревшей кодовой базой в 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)