[hibernate-dev] Null-Pointer Exception with 5.2.14

Guillaume Smet guillaume.smet at gmail.com
Mon Mar 5 07:34:27 EST 2018


Hi Christian,

Looks like we just crossposted.

FWIW, there is another report here:
https://hibernate.atlassian.net/browse/HHH-12347 . We should check this
case is covered too.

I marked the 2 other issues as duplicate of
https://hibernate.atlassian.net/browse/HHH-12332 , feel free to close them
as Duplicate once you have checked they are covered by your fix.

Thanks.

On Mon, Mar 5, 2018 at 1:20 PM, Christian Beikov <christian.beikov at gmail.com
> wrote:

> I have a reproducer as well and have a partial fix already. Just doing some
> more testing now to make sure some other edge cases I discovered are
> handled properly.
>
> Am 05.03.2018 13:08 schrieb "Petar Tahchiev" <paranoiabla at gmail.com>:
>
> > I managed to reproduce it. Here's the bug: https://hibernate.atlassian.
> > net/browse/HHH-12354 and here is the project to reproduce it:
> > https://github.com/ptahchiev/hibernate-test-case-templates/tree/nlp
> >
> > 2018-03-01 10:49 GMT+02:00 Vlad Mihalcea <mihalcea.vlad at gmail.com>:
> >
> >> Hi Petar,
> >>
> >> You can use this template:
> >>
> >> http://in.relation.to/2016/01/14/hibernate-jpa-test-case-template/
> >>
> >> to create a test case that replicates the issue. You don't need to
> >> provide all entities,
> >> just the 4 entities that build that hierarchy you have mentioned in your
> >> email.
> >>
> >> If you can replicate it, please open a Jira issue and attach the test
> >> case so that it's easier
> >> to investigate the cause and provide a fix.
> >>
> >> Thanks,
> >> Vlad
> >>
> >> On Thu, Mar 1, 2018 at 10:41 AM, Petar Tahchiev <paranoiabla at gmail.com>
> >> wrote:
> >>
> >>> Hi Christian,
> >>>
> >>> My model has more than 250 entities big. Here's the code that throws
> the
> >>> NLP:
> >>>
> >>> Class<?> c1 = clazz1.getMappedClass();
> >>> Class<?> c2 = commonPersistentClass.getMappedClass();
> >>> MappedSuperclass commonMappedSuperclass = null;
> >>>
> >>> // First we traverse up the clazz2/commonPersistentClass super types
> >>> until we find a common type
> >>> while ( !c2.isAssignableFrom( c1 ) ) {
> >>>    if ( commonPersistentClass == null) {
> >>>       if ( commonMappedSuperclass.getSuperPersistentClass() == null )
> >>> {    // <------------------------ NLPEX happens here!!!!!!
> >>>          commonMappedSuperclass =
> >>> commonMappedSuperclass.getSuperMappedSuperclass();
> >>>          commonPersistentClass = null;
> >>>       }
> >>>       else {
> >>>          commonPersistentClass =
> >>> commonMappedSuperclass.getSuperPersistentClass();
> >>>          commonMappedSuperclass = null;
> >>>       }
> >>>    }
> >>>    else {
> >>>       if ( commonPersistentClass.getSuperclass() == null ) {
> >>>          commonMappedSuperclass =
> >>> commonPersistentClass.getSuperMappedSuperclass();
> >>>          commonPersistentClass = null;
> >>>       }
> >>>       else {
> >>>          commonPersistentClass = commonPersistentClass.
> getSuperclass();
> >>>          commonMappedSuperclass = null;
> >>>       }
> >>>    }
> >>> }
> >>>
> >>> As you can see the commonMappedSuperclass is not initialized and stays
> >>> null!
> >>> At this moment c1 is CustomerEntity and c2 is UserGroupEntity. The
> >>> hierarchy looks like this:
> >>>
> >>>          Principal
> >>>        /              \
> >>>     Usergroup    User
> >>>                         |
> >>>                        Customer
> >>>
> >>> HTH
> >>>
> >>>
> >>>
> >>> 2018-02-28 21:52 GMT+02:00 Christian Beikov <
> christian.beikov at gmail.com
> >>> >:
> >>>
> >>> > Hey, I saw the comment on the issue. Thanks for reporting. Could you
> >>> > maybe post the model that causes this? I'd need to create a
> reproducer
> >>> > to be able to analyze this further.
> >>> >
> >>> >
> >>> > Mit freundlichen Grüßen,
> >>> > ------------------------------------------------------------
> >>> ------------
> >>> > *Christian Beikov*
> >>> > Am 28.02.2018 um 20:11 schrieb Petar Tahchiev:
> >>> > > Hi guys,
> >>> > > I have this exception with latest 5.2.14 (my project runs fine with
> >>> > 5.2.13):
> >>> > >
> >>> > > Caused by: javax.persistence.PersistenceException:
> [PersistenceUnit:
> >>> > > default] Unable to build Hibernate SessionFactory
> >>> > >      at
> >>> > > org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImp
> >>> > l.persistenceException(EntityManagerFactoryBuilderImpl.java:970)
> >>> > >      at
> >>> > > org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderI
> >>> mpl.build(
> >>> > EntityManagerFactoryBuilderImpl.java:895)
> >>> > >      at
> >>> > > org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceP
> >>> > rovider.createContainerEntityManagerFactory(SpringHibernateJ
> >>> paPersistenceP
> >>> > rovider.java:57)
> >>> > >      at
> >>> > > org.springframework.orm.jpa.LocalContainerEntityManagerFac
> toryBean.
> >>> > createNativeEntityManagerFactory(LocalContainerEntityManagerFac
> >>> > toryBean.java:365)
> >>> > >      at
> >>> > > org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.
> >>> > buildNativeEntityManagerFactory(AbstractEntityManagerFactory
> >>> Bean.java:387)
> >>> > >      at
> >>> > > org.springframework.orm.jpa.AbstractEntityManagerFactoryBe
> >>> > an.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:376)
> >>> > >      at
> >>> > > org.springframework.orm.jpa.LocalContainerEntityManagerFac
> >>> > toryBean.afterPropertiesSet(LocalContainerEntityManagerFac
> >>> > toryBean.java:341)
> >>> > >      at
> >>> > > org.springframework.beans.factory.support.AbstractAutowireCa
> >>> pableBeanFac
> >>> > tory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1769)
> >>> > >      at
> >>> > > org.springframework.beans.factory.support.AbstractAutowireCa
> >>> pableBeanFac
> >>> > tory.initializeBean(AbstractAutowireCapableBeanFactory.java:1706)
> >>> > >      ... 32 more
> >>> > > Caused by: org.hibernate.MappingException: Could not instantiate
> >>> > persister
> >>> > > org.hibernate.persister.entity.SingleTableEntityPersister
> >>> > >      at
> >>> > > org.hibernate.persister.internal.PersisterFactoryImpl.
> >>> > createEntityPersister(PersisterFactoryImpl.java:112)
> >>> > >      at
> >>> > > org.hibernate.persister.internal.PersisterFactoryImpl.
> >>> > createEntityPersister(PersisterFactoryImpl.java:77)
> >>> > >      at
> >>> > > org.hibernate.metamodel.internal.MetamodelImpl.
> >>> > initialize(MetamodelImpl.java:128)
> >>> > >      at
> >>> > > org.hibernate.internal.SessionFactoryImpl.<init>(
> >>> > SessionFactoryImpl.java:300)
> >>> > >      at
> >>> > > org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(
> >>> > SessionFactoryBuilderImpl.java:460)
> >>> > >      at
> >>> > > org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderI
> >>> mpl.build(
> >>> > EntityManagerFactoryBuilderImpl.java:892)
> >>> > >      ... 39 more
> >>> > > Caused by: java.lang.NullPointerException
> >>> > >      at
> >>> > > org.hibernate.persister.entity.AbstractPropertyMapping.
> >>> > getSuperCollection(AbstractPropertyMapping.java:285)
> >>> > >      at
> >>> > > org.hibernate.persister.entity.AbstractPropertyMapping.addPr
> >>> opertyPath(
> >>> > AbstractPropertyMapping.java:198)
> >>> > >      at
> >>> > > org.hibernate.persister.entity.AbstractPropertyMapping.
> >>> > initPropertyPaths(AbstractPropertyMapping.java:395)
> >>> > >      at
> >>> > > org.hibernate.persister.entity.AbstractEntityPersister.
> >>> > initOrdinaryPropertyPaths(AbstractEntityPersister.java:2300)
> >>> > >      at
> >>> > > org.hibernate.persister.entity.AbstractEntityPersister.
> >>> > initPropertyPaths(AbstractEntityPersister.java:2347)
> >>> > >      at
> >>> > > org.hibernate.persister.entity.AbstractEntityPersister.postC
> >>> onstruct(
> >>> > AbstractEntityPersister.java:3906)
> >>> > >      at
> >>> > > org.hibernate.persister.entity.SingleTableEntityPersister.<init>(
> >>> > SingleTableEntityPersister.java:437)
> >>> > >      at sun.reflect.GeneratedConstructorAccessor94
> .newInstance(Unkno
> >>> wn
> >>> > > Source)
> >>> > >      at
> >>> > > sun.reflect.DelegatingConstructorAccessorImpl.newInstance(
> >>> > DelegatingConstructorAccessorImpl.java:45)
> >>> > >      at java.lang.reflect.Constructor.
> newInstance(Constructor.java:4
> >>> 23)
> >>> > >      at
> >>> > > org.hibernate.persister.internal.PersisterFactoryImpl.
> >>> > createEntityPersister(PersisterFactoryImpl.java:96)
> >>> > >      ... 44 more
> >>> > >
> >>> > >
> >>> > >
> >>> > >
> >>> > >
> >>> >
> >>> > _______________________________________________
> >>> > hibernate-dev mailing list
> >>> > hibernate-dev at lists.jboss.org
> >>> > https://lists.jboss.org/mailman/listinfo/hibernate-dev
> >>>
> >>>
> >>>
> >>>
> >>> --
> >>> Regards, Petar!
> >>> Karlovo, Bulgaria.
> >>> ---
> >>> Public PGP Key at:
> >>> http://pgp.mit.edu:11371/pks/lookup?op=get&search=0x19658550C3110611
> >>> Key Fingerprint: A369 A7EE 61BC 93A3 CDFF  55A5 1965 8550 C311 0611
> >>> _______________________________________________
> >>> hibernate-dev mailing list
> >>> hibernate-dev at lists.jboss.org
> >>> https://lists.jboss.org/mailman/listinfo/hibernate-dev
> >>>
> >>
> >>
> >
> >
> > --
> > Regards, Petar!
> > Karlovo, Bulgaria.
> > ---
> > Public PGP Key at: http://pgp.mit.edu:11371/pks/lookup?op=get&search=
> > 0x19658550C3110611
> > Key Fingerprint: A369 A7EE 61BC 93A3 CDFF  55A5 1965 8550 C311 0611
> >
> _______________________________________________
> hibernate-dev mailing list
> hibernate-dev at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/hibernate-dev
>


More information about the hibernate-dev mailing list