org.hibernate.MappingException
is thrown when try to upgrade hibernate to 6.3.0.Final
Caused by: org.hibernate.MappingException: proxy must be either an interface, or the class itself: com.example.demo.IdGeneratedEntity
at org.hibernate.metamodel.internal.EntityRepresentationStrategyPojoStandard.createProxyFactory(EntityRepresentationStrategyPojoStandard.java:198) ~[hibernate-core-6.3.0.Final.jar:6.3.0.Final]
at org.hibernate.metamodel.internal.EntityRepresentationStrategyPojoStandard.<init>(EntityRepresentationStrategyPojoStandard.java:146) ~[hibernate-core-6.3.0.Final.jar:6.3.0.Final]
at org.hibernate.metamodel.internal.ManagedTypeRepresentationResolverStandard.resolveStrategy(ManagedTypeRepresentationResolverStandard.java:62) ~[hibernate-core-6.3.0.Final.jar:6.3.0.Final]
at org.hibernate.persister.entity.AbstractEntityPersister.<init>(AbstractEntityPersister.java:519) ~[hibernate-core-6.3.0.Final.jar:6.3.0.Final]
at org.hibernate.persister.entity.SingleTableEntityPersister.<init>(SingleTableEntityPersister.java:135) ~[hibernate-core-6.3.0.Final.jar:6.3.0.Final]
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[na:na]
at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) ~[na:na]
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480) ~[na:na]
at org.hibernate.persister.internal.PersisterFactoryImpl.createEntityPersister(PersisterFactoryImpl.java:92) ~[hibernate-core-6.3.0.Final.jar:6.3.0.Final]
at org.hibernate.persister.internal.PersisterFactoryImpl.createEntityPersister(PersisterFactoryImpl.java:75) ~[hibernate-core-6.3.0.Final.jar:6.3.0.Final]
at org.hibernate.metamodel.model.domain.internal.MappingMetamodelImpl.processBootEntities(MappingMetamodelImpl.java:243) ~[hibernate-core-6.3.0.Final.jar:6.3.0.Final]
at org.hibernate.metamodel.model.domain.internal.MappingMetamodelImpl.finishInitialization(MappingMetamodelImpl.java:181) ~[hibernate-core-6.3.0.Final.jar:6.3.0.Final]
at org.hibernate.internal.SessionFactoryImpl.initializeMappingModel(SessionFactoryImpl.java:323) ~[hibernate-core-6.3.0.Final.jar:6.3.0.Final]
at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:273) ~[hibernate-core-6.3.0.Final.jar:6.3.0.Final]
at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:450) ~[hibernate-core-6.3.0.Final.jar:6.3.0.Final]
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1479) ~[main/:na]
at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:75) ~[spring-orm-6.1.0-M4.jar:6.1.0-M4]
at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) ~[spring-orm-6.1.0-M4.jar:6.1.0-M4]
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) ~[spring-orm-6.1.0-M4.jar:6.1.0-M4]
... 97 common frames omitted
https://github.com/hibernate/hibernate-orm/blob/b82d4c3c74c88af484ac22924e89e7a797d430f3/hibernate-core/src/main/java/org/hibernate/metamodel/internal/EntityRepresentationStrategyPojoStandard.java#L195
It caused by the same class is loaded by different classloaders since 6.3.0.Final
:
- mappedClass
is loaded by org.springframework.instrument.classloading.SimpleThrowawayClassLoader
- proxyInterface
is loaded by jdk.internal.loader.ClassLoaders$AppClassLoader
NOTE: You have to fix https://github.com/hibernate/hibernate-orm/pull/7263 after upgrading to 6.3.0.Final
Comment From: quaff
I'm not sure it's a regression that hibernate should fix or change that spring should adapt.
Comment From: quaff
Fixed by https://github.com/hibernate/hibernate-orm/commit/c0fa25ade67bc1b783e0a715bbd00497e1f0ad6e.