diff --git a/integrationtest/mapper/orm/src/test/java/org/hibernate/search/integrationtest/mapper/orm/model/BackRefPropertyIT.java b/integrationtest/mapper/orm/src/test/java/org/hibernate/search/integrationtest/mapper/orm/model/BackRefPropertyIT.java index 9e22ed72f37..7bb2aed7765 100644 --- a/integrationtest/mapper/orm/src/test/java/org/hibernate/search/integrationtest/mapper/orm/model/BackRefPropertyIT.java +++ b/integrationtest/mapper/orm/src/test/java/org/hibernate/search/integrationtest/mapper/orm/model/BackRefPropertyIT.java @@ -62,7 +62,7 @@ public void test() { // Hibernate Search started successfully. // Check that there actually is a backref: MetamodelImplementor metamodel = sessionFactory.unwrap( SessionFactoryImplementor.class ).getMetamodel(); - assertThat( metamodel.entityPersister( IndexedEntity.class ).getEntityMetamodel().getPropertyNames() ) + assertThat( metamodel.entityPersister( IndexedEntity.class ).getPropertyNames() ) .contains( "_containing_fk_containingidBackref" ) .contains( "_containingIndexBackref" ); diff --git a/integrationtest/mapper/orm/src/test/java/org/hibernate/search/integrationtest/mapper/orm/model/SyntheticPropertyIT.java b/integrationtest/mapper/orm/src/test/java/org/hibernate/search/integrationtest/mapper/orm/model/SyntheticPropertyIT.java index 528ab8d08da..3a21e82ec04 100644 --- a/integrationtest/mapper/orm/src/test/java/org/hibernate/search/integrationtest/mapper/orm/model/SyntheticPropertyIT.java +++ b/integrationtest/mapper/orm/src/test/java/org/hibernate/search/integrationtest/mapper/orm/model/SyntheticPropertyIT.java @@ -57,7 +57,7 @@ public void test() { // Hibernate Search started successfully. // Check that there actually is a synthetic property: MetamodelImplementor metamodel = sessionFactory.unwrap( SessionFactoryImplementor.class ).getMetamodel(); - assertThat( metamodel.entityPersister( ContainedEntity.class ).getEntityMetamodel().getPropertyNames() ) + assertThat( metamodel.entityPersister( ContainedEntity.class ).getPropertyNames() ) .contains( "_" + IndexedEntity.class.getName().replace( '.', '_' ) + "_contained" ); // If we get here the bug was solved, but let's at least check that indexing works diff --git a/mapper/orm/src/main/java/org/hibernate/search/mapper/orm/common/impl/HibernateOrmUtils.java b/mapper/orm/src/main/java/org/hibernate/search/mapper/orm/common/impl/HibernateOrmUtils.java index 06298d01806..b428871d188 100644 --- a/mapper/orm/src/main/java/org/hibernate/search/mapper/orm/common/impl/HibernateOrmUtils.java +++ b/mapper/orm/src/main/java/org/hibernate/search/mapper/orm/common/impl/HibernateOrmUtils.java @@ -107,27 +107,6 @@ public static EntityPersister toMostSpecificCommonEntitySuperType(MetamodelImple return superTypeCandidate; } - public static boolean hasAtMostOneConcreteSubType(SessionFactoryImplementor sessionFactory, - EntityPersister parentType) { - @SuppressWarnings("unchecked") - Set subClassEntityNames = parentType.getEntityMetamodel().getSubclassEntityNames(); - // Quick check to return true immediately if there's only one type - if ( subClassEntityNames.size() == 1 ) { - return true; - } - - MetamodelImplementor metamodel = sessionFactory.getMetamodel(); - int concreteSubTypesCount = 0; - for ( String subClassEntityName : subClassEntityNames ) { - if ( !metamodel.entityPersister( subClassEntityName ).getEntityMetamodel().isAbstract() ) { - if ( ++concreteSubTypesCount > 1 ) { - return false; - } - } - } - return true; - } - public static boolean targetsAllConcreteSubTypes(SessionFactoryImplementor sessionFactory, EntityPersister parentType, Collection targetConcreteSubTypes) { @SuppressWarnings("unchecked") diff --git a/mapper/orm/src/main/java/org/hibernate/search/mapper/orm/loading/impl/AbstractHibernateOrmSelectionEntityLoader.java b/mapper/orm/src/main/java/org/hibernate/search/mapper/orm/loading/impl/AbstractHibernateOrmSelectionEntityLoader.java index 87c2f7d5e86..73185583308 100644 --- a/mapper/orm/src/main/java/org/hibernate/search/mapper/orm/loading/impl/AbstractHibernateOrmSelectionEntityLoader.java +++ b/mapper/orm/src/main/java/org/hibernate/search/mapper/orm/loading/impl/AbstractHibernateOrmSelectionEntityLoader.java @@ -13,7 +13,6 @@ import org.hibernate.persister.entity.EntityPersister; import org.hibernate.query.Query; import org.hibernate.search.engine.common.timing.Deadline; -import org.hibernate.search.mapper.orm.common.impl.HibernateOrmUtils; import org.hibernate.search.mapper.orm.search.query.spi.HibernateOrmSearchQueryHints; import org.hibernate.search.mapper.pojo.loading.spi.PojoSelectionEntityLoader; @@ -23,7 +22,6 @@ abstract class AbstractHibernateOrmSelectionEntityLoader implements PojoSelec protected final EntityPersister entityPersister; protected final LoadingSessionContext sessionContext; protected final MutableEntityLoadingOptions loadingOptions; - protected final boolean singleConcreteTypeInHierarchy; protected final TypeQueryFactory queryFactory; public AbstractHibernateOrmSelectionEntityLoader(EntityPersister entityPersister, TypeQueryFactory queryFactory, @@ -31,8 +29,6 @@ public AbstractHibernateOrmSelectionEntityLoader(EntityPersister entityPersister this.entityPersister = entityPersister; this.sessionContext = sessionContext; this.loadingOptions = loadingOptions; - this.singleConcreteTypeInHierarchy = HibernateOrmUtils.hasAtMostOneConcreteSubType( - sessionContext.session().getSessionFactory(), entityPersister ); this.queryFactory = queryFactory; } diff --git a/orm6/integrationtest/mapper/orm/ant-src-changes.patch b/orm6/integrationtest/mapper/orm/ant-src-changes.patch index 040c91fb225..b3b8cb35336 100644 --- a/orm6/integrationtest/mapper/orm/ant-src-changes.patch +++ b/orm6/integrationtest/mapper/orm/ant-src-changes.patch @@ -879,7 +879,7 @@ index c032664bb9..4d205fdccf 100644 .withProperty( AvailableSettings.USE_SECOND_LEVEL_CACHE, "true" ) .withAnnotatedTypes( IndexedEntity.class ); diff --git a/test/java/org/hibernate/search/integrationtest/mapper/orm/model/BackRefPropertyIT.java b/test/java/org/hibernate/search/integrationtest/mapper/orm/model/BackRefPropertyIT.java -index 1bf135620e..97da0239d0 100644 +index 798418f3a9..bbfc99e232 100644 --- a/test/java/org/hibernate/search/integrationtest/mapper/orm/model/BackRefPropertyIT.java +++ b/test/java/org/hibernate/search/integrationtest/mapper/orm/model/BackRefPropertyIT.java @@ -19,7 +19,7 @@ @@ -896,9 +896,9 @@ index 1bf135620e..97da0239d0 100644 // Hibernate Search started successfully. // Check that there actually is a backref: - MetamodelImplementor metamodel = sessionFactory.unwrap( SessionFactoryImplementor.class ).getMetamodel(); -- assertThat( metamodel.entityPersister( IndexedEntity.class ).getEntityMetamodel().getPropertyNames() ) +- assertThat( metamodel.entityPersister( IndexedEntity.class ).getPropertyNames() ) + MappingMetamodel metamodel = sessionFactory.unwrap( SessionFactoryImplementor.class ).getMappingMetamodel(); -+ assertThat( metamodel.getEntityDescriptor( IndexedEntity.class ).getEntityMetamodel().getPropertyNames() ) ++ assertThat( metamodel.getEntityDescriptor( IndexedEntity.class ).getPropertyNames() ) .contains( "_containing_fk_containingidBackref" ) .contains( "_containingIndexBackref" ); @@ -942,7 +942,7 @@ index d110dbb171..0796b95350 100644 @OneToMany(mappedBy = "genericProperty") diff --git a/test/java/org/hibernate/search/integrationtest/mapper/orm/model/SyntheticPropertyIT.java b/test/java/org/hibernate/search/integrationtest/mapper/orm/model/SyntheticPropertyIT.java -index fd7d546f8f..42625565bc 100644 +index 43bed0bfd6..16115098af 100644 --- a/test/java/org/hibernate/search/integrationtest/mapper/orm/model/SyntheticPropertyIT.java +++ b/test/java/org/hibernate/search/integrationtest/mapper/orm/model/SyntheticPropertyIT.java @@ -19,7 +19,7 @@ @@ -959,9 +959,9 @@ index fd7d546f8f..42625565bc 100644 // Hibernate Search started successfully. // Check that there actually is a synthetic property: - MetamodelImplementor metamodel = sessionFactory.unwrap( SessionFactoryImplementor.class ).getMetamodel(); -- assertThat( metamodel.entityPersister( ContainedEntity.class ).getEntityMetamodel().getPropertyNames() ) +- assertThat( metamodel.entityPersister( ContainedEntity.class ).getPropertyNames() ) + MappingMetamodel metamodel = sessionFactory.unwrap( SessionFactoryImplementor.class ).getMappingMetamodel(); -+ assertThat( metamodel.getEntityDescriptor( ContainedEntity.class ).getEntityMetamodel().getPropertyNames() ) ++ assertThat( metamodel.getEntityDescriptor( ContainedEntity.class ).getPropertyNames() ) .contains( "_" + IndexedEntity.class.getName().replace( '.', '_' ) + "_contained" ); // If we get here the bug was solved, but let's at least check that indexing works diff --git a/orm6/mapper/orm/ant-src-changes.patch b/orm6/mapper/orm/ant-src-changes.patch index 196f14bbe5c..d114ed2a9e2 100644 --- a/orm6/mapper/orm/ant-src-changes.patch +++ b/orm6/mapper/orm/ant-src-changes.patch @@ -34,19 +34,20 @@ index 289a060c28..60e392d528 100644 .build(); // Orchestrate bootstrap and shutdown diff --git a/main/java/org/hibernate/search/mapper/orm/common/impl/HibernateOrmUtils.java b/main/java/org/hibernate/search/mapper/orm/common/impl/HibernateOrmUtils.java -index d61af877f4..116de2331f 100644 +index d6ed099098..e3fee26f2c 100644 --- a/main/java/org/hibernate/search/mapper/orm/common/impl/HibernateOrmUtils.java +++ b/main/java/org/hibernate/search/mapper/orm/common/impl/HibernateOrmUtils.java -@@ -21,7 +21,7 @@ +@@ -21,7 +21,8 @@ import org.hibernate.engine.spi.SessionFactoryImplementor; import org.hibernate.engine.spi.SessionImplementor; import org.hibernate.mapping.Property; -import org.hibernate.metamodel.spi.MetamodelImplementor; +import org.hibernate.metamodel.MappingMetamodel; ++import org.hibernate.metamodel.mapping.EntityMappingType; import org.hibernate.persister.entity.EntityPersister; import org.hibernate.search.mapper.orm.logging.impl.Log; import org.hibernate.search.util.common.annotation.impl.SuppressForbiddenApis; -@@ -77,12 +77,12 @@ public static EntityPersister toRootEntityType(SessionFactoryImplementor session +@@ -77,13 +78,12 @@ public static EntityPersister toRootEntityType(SessionFactoryImplementor session * where A and C are entity types and B is a mapped superclass. * So we need to exclude non-entity types, and for that we need the Hibernate ORM metamodel. */ @@ -58,33 +59,24 @@ index d61af877f4..116de2331f 100644 } - public static EntityPersister toMostSpecificCommonEntitySuperType(MetamodelImplementor metamodel, -+ public static EntityPersister toMostSpecificCommonEntitySuperType(MappingMetamodel metamodel, - EntityPersister type1, EntityPersister type2) { +- EntityPersister type1, EntityPersister type2) { ++ public static EntityPersister toMostSpecificCommonEntitySuperType(EntityPersister type1, EntityPersister type2) { /* * We need to rely on Hibernate ORM's SPIs: this is complex stuff. -@@ -95,7 +95,7 @@ public static EntityPersister toMostSpecificCommonEntitySuperType(MetamodelImple + * For example there may be class hierarchies such as A > B > C +@@ -93,9 +93,8 @@ public static EntityPersister toMostSpecificCommonEntitySuperType(MetamodelImple + */ + EntityPersister superTypeCandidate = type1; while ( superTypeCandidate != null && !isSuperTypeOf( superTypeCandidate, type2 ) ) { - String superSuperTypeEntityName = superTypeCandidate.getEntityMetamodel().getSuperclass(); - superTypeCandidate = superSuperTypeEntityName == null ? null +- String superSuperTypeEntityName = superTypeCandidate.getEntityMetamodel().getSuperclass(); +- superTypeCandidate = superSuperTypeEntityName == null ? null - : metamodel.entityPersister( superSuperTypeEntityName ).getEntityPersister(); -+ : metamodel.getEntityDescriptor( superSuperTypeEntityName ).getEntityPersister(); ++ EntityMappingType superSuperType = superTypeCandidate.getSuperMappingType(); ++ superTypeCandidate = superSuperType == null ? null : superSuperType.getEntityPersister(); } if ( superTypeCandidate == null ) { throw new AssertionFailure( -@@ -116,10 +116,10 @@ public static boolean hasAtMostOneConcreteSubType(SessionFactoryImplementor sess - return true; - } - -- MetamodelImplementor metamodel = sessionFactory.getMetamodel(); -+ MappingMetamodel metamodel = sessionFactory.getMappingMetamodel(); - int concreteSubTypesCount = 0; - for ( String subClassEntityName : subClassEntityNames ) { -- if ( !metamodel.entityPersister( subClassEntityName ).getEntityMetamodel().isAbstract() ) { -+ if ( !metamodel.getEntityDescriptor( subClassEntityName ).getEntityMetamodel().isAbstract() ) { - if ( ++concreteSubTypesCount > 1 ) { - return false; - } -@@ -137,10 +137,10 @@ public static boolean targetsAllConcreteSubTypes(SessionFactoryImplementor sessi +@@ -116,10 +115,10 @@ public static boolean targetsAllConcreteSubTypes(SessionFactoryImplementor sessi return true; } @@ -93,32 +85,39 @@ index d61af877f4..116de2331f 100644 int concreteSubTypesCount = 0; for ( String subClassEntityName : subClassEntityNames ) { - if ( !metamodel.entityPersister( subClassEntityName ).getEntityMetamodel().isAbstract() ) { -+ if ( !metamodel.getEntityDescriptor( subClassEntityName ).getEntityMetamodel().isAbstract() ) { ++ if ( !metamodel.getEntityDescriptor( subClassEntityName ).isAbstract() ) { ++concreteSubTypesCount; } } diff --git a/main/java/org/hibernate/search/mapper/orm/loading/impl/HibernateOrmEntityIdEntityLoadingStrategy.java b/main/java/org/hibernate/search/mapper/orm/loading/impl/HibernateOrmEntityIdEntityLoadingStrategy.java -index 21503d08be..4d35daf39e 100644 +index 21503d08be..45b9fc0a50 100644 --- a/main/java/org/hibernate/search/mapper/orm/loading/impl/HibernateOrmEntityIdEntityLoadingStrategy.java +++ b/main/java/org/hibernate/search/mapper/orm/loading/impl/HibernateOrmEntityIdEntityLoadingStrategy.java -@@ -12,7 +12,7 @@ +@@ -12,7 +12,6 @@ import org.hibernate.AssertionFailure; import org.hibernate.engine.spi.SessionFactoryImplementor; import org.hibernate.engine.spi.SessionImplementor; -import org.hibernate.metamodel.spi.MetamodelImplementor; -+import org.hibernate.metamodel.MappingMetamodel; import org.hibernate.persister.entity.EntityPersister; import org.hibernate.search.mapper.orm.common.impl.HibernateOrmUtils; import org.hibernate.search.mapper.orm.search.loading.EntityLoadingCacheLookupStrategy; -@@ -149,7 +149,7 @@ private PojoSelectionEntityLoader doCreate(EntityPersister entityPersister, +@@ -149,7 +148,6 @@ private PojoSelectionEntityLoader doCreate(EntityPersister entityPersister, private static EntityPersister toMostSpecificCommonEntitySuperType(SessionImplementor session, Iterable> targetEntityTypeContexts) { - MetamodelImplementor metamodel = session.getSessionFactory().getMetamodel(); -+ MappingMetamodel metamodel = session.getSessionFactory().getMappingMetamodel(); EntityPersister result = null; for ( LoadingTypeContext targetTypeContext : targetEntityTypeContexts ) { EntityPersister type = targetTypeContext.entityPersister(); +@@ -157,7 +155,7 @@ private static EntityPersister toMostSpecificCommonEntitySuperType(SessionImplem + result = type; + } + else { +- result = HibernateOrmUtils.toMostSpecificCommonEntitySuperType( metamodel, result, type ); ++ result = HibernateOrmUtils.toMostSpecificCommonEntitySuperType( result, type ); + } + } + return result; diff --git a/main/java/org/hibernate/search/mapper/orm/loading/impl/HibernateOrmMassIdentifierLoader.java b/main/java/org/hibernate/search/mapper/orm/loading/impl/HibernateOrmMassIdentifierLoader.java index 39df0c5a24..159eb3207c 100644 --- a/main/java/org/hibernate/search/mapper/orm/loading/impl/HibernateOrmMassIdentifierLoader.java