In order to ensure out of the box compatibility with Hibernate 6.2+, this change disables Hibernate reflection optimizer when using native images in order to avoid errors like the one mentioned below:
org.hibernate.HibernateException: Using the ReflectionOptimizer is not possible when the configured BytecodeProvider is 'none'. Disable hibernate.bytecode.use_reflection_optimizer or use a different BytecodeProvider |
-- | --
| at org.hibernate.bytecode.internal.none.BytecodeProviderImpl.getReflectionOptimizer(BytecodeProviderImpl.java:48) ~[data-jpa:6.2.2.Final] |
| at org.hibernate.metamodel.internal.EntityRepresentationStrategyPojoStandard.resolveReflectionOptimizer(EntityRepresentationStrategyPojoStandard.java:293) ~[na:na] |
| at org.hibernate.metamodel.internal.EntityRepresentationStrategyPojoStandard.<init>(EntityRepresentationStrategyPojoStandard.java:161) ~[na:na] |
| at org.hibernate.metamodel.internal.ManagedTypeRepresentationResolverStandard.resolveStrategy(ManagedTypeRepresentationResolverStandard.java:62) ~[na:na] |
| at org.hibernate.persister.entity.AbstractEntityPersister.<init>(AbstractEntityPersister.java:499) ~[data-jpa:6.2.2.Final] |
| at org.hibernate.persister.entity.SingleTableEntityPersister.<init>(SingleTableEntityPersister.java:139) ~[data-jpa:6.2.2.Final] |
| at java.base@17.0.5/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) ~[data-jpa:na] |
| at java.base@17.0.5/java.lang.reflect.Constructor.newInstance(Constructor.java:480) ~[data-jpa:na] |
| at org.hibernate.persister.internal.PersisterFactoryImpl.createEntityPersister(PersisterFactoryImpl.java:92) ~[data-jpa:6.2.2.Final] |
| at org.hibernate.persister.internal.PersisterFactoryImpl.createEntityPersister(PersisterFactoryImpl.java:75) ~[data-jpa:6.2.2.Final] |
| at org.hibernate.metamodel.model.domain.internal.MappingMetamodelImpl.processBootEntities(MappingMetamodelImpl.java:247) ~[na:na] |
| at org.hibernate.metamodel.model.domain.internal.MappingMetamodelImpl.finishInitialization(MappingMetamodelImpl.java:185) ~[na:na] |
| at org.hibernate.internal.SessionFactoryImpl.initializeMappingModel(SessionFactoryImpl.java:319) ~[na:na] |
| at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:269) ~[na:na] |
| at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:431) ~[na:na] |
| at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1455) ~[na:na] |
| at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:74) ~[na:na]
Comment From: Eng-Fouad
This fails with Hibernate 6.3.0, as Environment.USE_REFLECTION_OPTIMIZER
was removed: https://github.com/hibernate/hibernate-orm/pull/7197/files#diff-2907b1254eed5e31600371471560e28b875699a5e6266345062ba6f21aead4f9L290-L292