Have SessionFactory#getMetamodel() return a JpaMetamodel

It just makes sense, since JpaMetamodel is Hibernate ORM's
extension of jakarta.persistence.metamodel.Metamodel,
and SessionFactory#getMetamodel() is Hibernate ORM's extension
of EntityManager#getMetamodel().
This commit is contained in:
Yoann Rodière 2021-10-04 14:02:44 +02:00 committed by Steve Ebersole
parent a16305e01f
commit e93d33be16
3 changed files with 57 additions and 29 deletions

View File

@ -8,7 +8,6 @@ package org.hibernate;
import jakarta.persistence.metamodel.EntityType; import jakarta.persistence.metamodel.EntityType;
import org.hibernate.metamodel.model.domain.EntityDomainType;
import org.hibernate.metamodel.model.domain.JpaMetamodel; import org.hibernate.metamodel.model.domain.JpaMetamodel;
/** /**
@ -19,7 +18,7 @@ import org.hibernate.metamodel.model.domain.JpaMetamodel;
* @see JpaMetamodel * @see JpaMetamodel
*/ */
@Deprecated @Deprecated
public interface Metamodel extends jakarta.persistence.metamodel.Metamodel { public interface Metamodel extends JpaMetamodel {
/** /**
* Access to the SessionFactory that this Metamodel instance is bound to. * Access to the SessionFactory that this Metamodel instance is bound to.
* *
@ -35,15 +34,6 @@ public interface Metamodel extends jakarta.persistence.metamodel.Metamodel {
return entity( entityName ); return entity( entityName );
} }
/**
* Access to an entity supporting Hibernate's entity-name feature
*
* @param entityName The entity-name
*
* @return The entity descriptor
*/
<X> EntityDomainType<X> entity(String entityName);
String getImportedClassName(String className); String getImportedClassName(String className);
/** /**

View File

@ -41,6 +41,7 @@ import org.hibernate.graph.spi.RootGraphImplementor;
import org.hibernate.internal.EntityManagerMessageLogger; import org.hibernate.internal.EntityManagerMessageLogger;
import org.hibernate.internal.HEMLogging; import org.hibernate.internal.HEMLogging;
import org.hibernate.internal.util.collections.ArrayHelper; import org.hibernate.internal.util.collections.ArrayHelper;
import org.hibernate.jpa.spi.JpaCompliance;
import org.hibernate.mapping.Collection; import org.hibernate.mapping.Collection;
import org.hibernate.mapping.Component; import org.hibernate.mapping.Component;
import org.hibernate.mapping.MappedSuperclass; import org.hibernate.mapping.MappedSuperclass;
@ -471,6 +472,56 @@ public class MappingMetamodelImpl implements MappingMetamodel, MetamodelImplemen
return jpaMetamodel.entity( entityName ); return jpaMetamodel.entity( entityName );
} }
@Override
public <X> EntityDomainType<X> getHqlEntityReference(String entityName) {
return jpaMetamodel.getHqlEntityReference( entityName );
}
@Override
public <X> EntityDomainType<X> resolveHqlEntityReference(String entityName) {
return jpaMetamodel.resolveHqlEntityReference( entityName );
}
@Override
public void visitManagedTypes(Consumer<ManagedDomainType<?>> action) {
jpaMetamodel.visitManagedTypes( action );
}
@Override
public <X> ManagedDomainType<X> findManagedType(Class<X> cls) {
return jpaMetamodel.findManagedType( cls );
}
@Override
public void visitEntityTypes(Consumer<EntityDomainType<?>> action) {
jpaMetamodel.visitEntityTypes( action );
}
@Override
public <X> EntityDomainType<X> findEntityType(Class<X> cls) {
return jpaMetamodel.findEntityType( cls );
}
@Override
public void visitRootEntityTypes(Consumer<EntityDomainType<?>> action) {
jpaMetamodel.visitRootEntityTypes( action );
}
@Override
public void visitEmbeddables(Consumer<EmbeddableDomainType<?>> action) {
jpaMetamodel.visitEmbeddables( action );
}
@Override
public String qualifyImportableName(String queryName) {
return jpaMetamodel.qualifyImportableName( queryName );
}
@Override
public Map<String, Map<Class<?>, Enum<?>>> getAllowedEnumLiteralTexts() {
return jpaMetamodel.getAllowedEnumLiteralTexts();
}
@Override @Override
public String getImportedClassName(String className) { public String getImportedClassName(String className) {
throw new UnsupportedOperationException( ); throw new UnsupportedOperationException( );
@ -616,6 +667,11 @@ public class MappingMetamodelImpl implements MappingMetamodel, MetamodelImplemen
return jpaMetamodel.findEntityGraphsByJavaType( entityClass ); return jpaMetamodel.findEntityGraphsByJavaType( entityClass );
} }
@Override
public JpaCompliance getJpaCompliance() {
return jpaMetamodel.getJpaCompliance();
}
@Override @Override
public RootGraph<?> findNamedGraph(String name) { public RootGraph<?> findNamedGraph(String name) {
return findEntityGraphByName( name ); return findEntityGraphByName( name );

View File

@ -18,9 +18,7 @@ import org.hibernate.Metamodel;
import org.hibernate.engine.spi.SessionFactoryImplementor; import org.hibernate.engine.spi.SessionFactoryImplementor;
import org.hibernate.graph.spi.RootGraphImplementor; import org.hibernate.graph.spi.RootGraphImplementor;
import org.hibernate.metamodel.MappingMetamodel; import org.hibernate.metamodel.MappingMetamodel;
import org.hibernate.metamodel.model.domain.EmbeddableDomainType;
import org.hibernate.metamodel.model.domain.EntityDomainType; import org.hibernate.metamodel.model.domain.EntityDomainType;
import org.hibernate.metamodel.model.domain.ManagedDomainType;
import org.hibernate.persister.collection.CollectionPersister; import org.hibernate.persister.collection.CollectionPersister;
import org.hibernate.persister.entity.EntityPersister; import org.hibernate.persister.entity.EntityPersister;
@ -110,18 +108,12 @@ public interface MetamodelImplementor extends MappingMetamodel, Metamodel {
*/ */
String[] getAllCollectionRoles(); String[] getAllCollectionRoles();
<T> void addNamedEntityGraph(String graphName, RootGraphImplementor<T> entityGraph);
/** /**
* @deprecated Use {@link #addNamedEntityGraph(String, RootGraphImplementor)} instead. * @deprecated Use {@link #addNamedEntityGraph(String, RootGraphImplementor)} instead.
*/ */
@Deprecated @Deprecated
<T> void addNamedEntityGraph(String graphName, EntityGraph<T> entityGraph); <T> void addNamedEntityGraph(String graphName, EntityGraph<T> entityGraph);
<T> RootGraphImplementor<T> findEntityGraphByName(String name);
<T> List<RootGraphImplementor<? super T>> findEntityGraphsByJavaType(Class<T> entityClass);
/** /**
* @deprecated Use {@link #findEntityGraphsByJavaType(Class)} instead. * @deprecated Use {@link #findEntityGraphsByJavaType(Class)} instead.
*/ */
@ -136,16 +128,6 @@ public interface MetamodelImplementor extends MappingMetamodel, Metamodel {
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Co-variant returns // Co-variant returns
@Override
<X> EntityDomainType<X> entity(Class<X> cls);
@Override
<X> ManagedDomainType<X> managedType(Class<X> cls);
@Override
<X> EmbeddableDomainType<X> embeddable(Class<X> cls);
@Override @Override
default EntityDomainType getEntityTypeByName(String entityName) { default EntityDomainType getEntityTypeByName(String entityName) {
return entity( entityName ); return entity( entityName );