clean up the MappingMetamodel interface

- deprecate some operations
- remove some already-deprecated operations
This commit is contained in:
Gavin King 2024-11-15 19:25:13 +01:00
parent 9a219c2c30
commit d784d6a808
6 changed files with 15 additions and 99 deletions

View File

@ -757,7 +757,7 @@ public class SessionFactoryImpl extends QueryParameterBindingTypeResolverImpl im
} }
} }
); );
runtimeMetamodels.getMappingMetamodel().close(); // runtimeMetamodels.getMappingMetamodel().close();
} }
if ( queryEngine != null ) { if ( queryEngine != null ) {

View File

@ -10,6 +10,7 @@ import java.util.function.Function;
import java.util.stream.Stream; import java.util.stream.Stream;
import org.hibernate.Incubating; import org.hibernate.Incubating;
import org.hibernate.Internal;
import org.hibernate.graph.RootGraph; import org.hibernate.graph.RootGraph;
import org.hibernate.graph.spi.RootGraphImplementor; import org.hibernate.graph.spi.RootGraphImplementor;
import org.hibernate.metamodel.mapping.EmbeddableValuedModelPart; import org.hibernate.metamodel.mapping.EmbeddableValuedModelPart;
@ -42,6 +43,7 @@ public interface MappingMetamodel extends Metamodel {
// SQM model -> Mapping model // SQM model -> Mapping model
// todo (6.0) : POC intended for use in SQM to SQL translation // todo (6.0) : POC intended for use in SQM to SQL translation
@Internal
MappingModelExpressible<?> resolveMappingExpressible( MappingModelExpressible<?> resolveMappingExpressible(
SqmExpressible<?> sqmExpressible, SqmExpressible<?> sqmExpressible,
Function<NavigablePath, Function<NavigablePath,
@ -61,6 +63,8 @@ public interface MappingMetamodel extends Metamodel {
* Visit all entity mapping descriptors defined in the model * Visit all entity mapping descriptors defined in the model
*/ */
void forEachEntityDescriptor(Consumer<EntityPersister> action); void forEachEntityDescriptor(Consumer<EntityPersister> action);
@Deprecated(forRemoval = true, since = "7")
Stream<EntityPersister> streamEntityDescriptors(); Stream<EntityPersister> streamEntityDescriptors();
/** /**
@ -123,31 +127,12 @@ public interface MappingMetamodel extends Metamodel {
* direct entity name. * direct entity name.
* *
* @throws org.hibernate.UnknownEntityTypeException If a matching EntityPersister cannot be located * @throws org.hibernate.UnknownEntityTypeException If a matching EntityPersister cannot be located
*
* @deprecated No longer used
*/ */
@Deprecated(forRemoval = true, since = "7")
EntityPersister locateEntityDescriptor(Class<?> byClass); EntityPersister locateEntityDescriptor(Class<?> byClass);
/**
* @see #locateEntityDescriptor
*
* @deprecated use {@link #locateEntityDescriptor(Class)} instead
*/
@Deprecated(since = "6.0")
default EntityPersister locateEntityPersister(Class<?> byClass) {
return locateEntityDescriptor( byClass );
}
/**
* Locate the entity persister by name.
*
* @return The located EntityPersister, never {@code null}
*
* @throws org.hibernate.UnknownEntityTypeException If a matching EntityPersister cannot be located
*
* @deprecated - use {@link #getEntityDescriptor(String)} instead
*/
@Deprecated(since = "6.0")
EntityPersister locateEntityPersister(String byName);
String getImportedName(String name); String getImportedName(String name);
@ -158,6 +143,8 @@ public interface MappingMetamodel extends Metamodel {
* Visit the mapping descriptors for all collections defined in the model * Visit the mapping descriptors for all collections defined in the model
*/ */
void forEachCollectionDescriptor(Consumer<CollectionPersister> action); void forEachCollectionDescriptor(Consumer<CollectionPersister> action);
@Deprecated(forRemoval = true, since = "7")
Stream<CollectionPersister> streamCollectionDescriptors(); Stream<CollectionPersister> streamCollectionDescriptors();
/** /**

View File

@ -21,8 +21,6 @@ import org.hibernate.EntityNameResolver;
import org.hibernate.HibernateException; import org.hibernate.HibernateException;
import org.hibernate.MappingException; import org.hibernate.MappingException;
import org.hibernate.UnknownEntityTypeException; import org.hibernate.UnknownEntityTypeException;
import org.hibernate.boot.registry.classloading.spi.ClassLoaderService;
import org.hibernate.boot.registry.classloading.spi.ClassLoadingException;
import org.hibernate.boot.spi.MetadataImplementor; import org.hibernate.boot.spi.MetadataImplementor;
import org.hibernate.cache.spi.CacheImplementor; import org.hibernate.cache.spi.CacheImplementor;
import org.hibernate.cache.spi.access.CollectionDataAccess; import org.hibernate.cache.spi.access.CollectionDataAccess;
@ -104,8 +102,6 @@ public class MappingMetamodelImpl extends QueryParameterBindingTypeResolverImpl
//NOTE: we suppress deprecation warnings because at the moment we //NOTE: we suppress deprecation warnings because at the moment we
//implement a deprecated API so have to override deprecated things //implement a deprecated API so have to override deprecated things
private static final String[] EMPTY_IMPLEMENTORS = EMPTY_STRING_ARRAY;
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// JpaMetamodel // JpaMetamodel
@ -145,22 +141,8 @@ public class MappingMetamodelImpl extends QueryParameterBindingTypeResolverImpl
// //
// To account for this, we track both paradigms here... // To account for this, we track both paradigms here...
/* // There can be multiple instances of an Embeddable type, each one being relative to its parent entity.
* There can be multiple instances of an Embeddable type, each one being relative to its parent entity.
*/
/**
* That's not strictly correct in the JPA standard since for a given Java type we could have
* multiple instances of an embeddable type. Some embeddable might override attributes, but we
* can only return a single EmbeddableTypeImpl for a given Java object class.
* <p>
* A better approach would be if the parent class and attribute name would be included as well
* when trying to locate the embeddable type.
*/
// private final Map<Class<?>, EmbeddableDomainType<?>> jpaEmbeddableTypeMap = new ConcurrentHashMap<>();
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
private final Map<String, String[]> implementorsCache = new ConcurrentHashMap<>();
private final Map<TupleType<?>, MappingModelExpressible<?>> tupleTypeCache = new ConcurrentHashMap<>(); private final Map<TupleType<?>, MappingModelExpressible<?>> tupleTypeCache = new ConcurrentHashMap<>();
public MappingMetamodelImpl(TypeConfiguration typeConfiguration, ServiceRegistry serviceRegistry) { public MappingMetamodelImpl(TypeConfiguration typeConfiguration, ServiceRegistry serviceRegistry) {
@ -370,7 +352,7 @@ public class MappingMetamodelImpl extends QueryParameterBindingTypeResolverImpl
} }
} }
@Override @Override @Deprecated(forRemoval=true) @SuppressWarnings( "removal" )
public Stream<EntityPersister> streamEntityDescriptors() { public Stream<EntityPersister> streamEntityDescriptors() {
return Arrays.stream( entityPersisterMap.values() ); return Arrays.stream( entityPersisterMap.values() );
} }
@ -430,7 +412,7 @@ public class MappingMetamodelImpl extends QueryParameterBindingTypeResolverImpl
return entityPersister; return entityPersister;
} }
@Override @Override @Deprecated(forRemoval = true) @SuppressWarnings( "removal" )
public EntityPersister locateEntityDescriptor(Class<?> byClass) { public EntityPersister locateEntityDescriptor(Class<?> byClass) {
EntityPersister entityPersister = entityPersisterMap.get( byClass.getName() ); EntityPersister entityPersister = entityPersisterMap.get( byClass.getName() );
if ( entityPersister == null ) { if ( entityPersister == null ) {
@ -542,43 +524,6 @@ public class MappingMetamodelImpl extends QueryParameterBindingTypeResolverImpl
return jpaMetamodel.enumValue( enumType, enumValueName ); return jpaMetamodel.enumValue( enumType, enumValueName );
} }
public String[] getImplementors(String className) throws MappingException {
// computeIfAbsent() can be a contention point and we expect all the values to be in the map at some point so
// let's do an optimistic check first
String[] implementors = implementorsCache.get( className );
if ( implementors != null ) {
return Arrays.copyOf( implementors, implementors.length );
}
try {
final Class<?> clazz =
jpaMetamodel.getServiceRegistry().requireService( ClassLoaderService.class )
.classForName( className );
implementors = doGetImplementors( clazz );
if ( implementors.length > 0 ) {
implementorsCache.putIfAbsent( className, implementors );
return Arrays.copyOf( implementors, implementors.length );
}
else {
return EMPTY_IMPLEMENTORS;
}
}
catch (ClassLoadingException e) {
return new String[] { className }; // we don't cache anything for dynamic classes
}
}
@Override
public EntityPersister locateEntityPersister(String byName) {
final EntityPersister entityPersister = entityPersisterMap.get( byName );
if ( entityPersister == null ) {
throw new UnknownEntityTypeException( "Unable to locate persister: " + byName );
}
return entityPersister;
}
@Override @Override
public String getImportedName(String name) { public String getImportedName(String name) {
final String qualifiedName = jpaMetamodel.qualifyImportableName( name ); final String qualifiedName = jpaMetamodel.qualifyImportableName( name );
@ -590,7 +535,7 @@ public class MappingMetamodelImpl extends QueryParameterBindingTypeResolverImpl
collectionPersisterMap.values().forEach( action ); collectionPersisterMap.values().forEach( action );
} }
@Override @Override @Deprecated(forRemoval=true) @SuppressWarnings( "removal" )
public Stream<CollectionPersister> streamCollectionDescriptors() { public Stream<CollectionPersister> streamCollectionDescriptors() {
return collectionPersisterMap.values().stream(); return collectionPersisterMap.values().stream();
} }
@ -847,9 +792,4 @@ public class MappingMetamodelImpl extends QueryParameterBindingTypeResolverImpl
public String[] getAllCollectionRoles() { public String[] getAllCollectionRoles() {
return ArrayHelper.toStringArray( collectionPersisterMap.keySet() ); return ArrayHelper.toStringArray( collectionPersisterMap.keySet() );
} }
@Override
public void close() {
// anything to do ?
}
} }

View File

@ -55,9 +55,4 @@ public interface MappingMetamodelImplementor extends MappingMetamodel, QueryPara
.map( CollectionPersister::getRole ) .map( CollectionPersister::getRole )
.toArray( String[]::new ); .toArray( String[]::new );
} }
default void close() {
}
} }

View File

@ -50,7 +50,7 @@ public class EntityNonEntityTest extends BaseCoreFunctionalTestCase {
@JiraKey( value = "HHH-9856" ) @JiraKey( value = "HHH-9856" )
public void testGetAndFindNonEntityThrowsIllegalArgumentException() { public void testGetAndFindNonEntityThrowsIllegalArgumentException() {
try { try {
sessionFactory().getMappingMetamodel().locateEntityPersister(Cellular.class); sessionFactory().getMappingMetamodel().findEntityDescriptor(Cellular.class);
sessionFactory().getRuntimeMetamodels().getMappingMetamodel().getEntityDescriptor( Cellular.class ); sessionFactory().getRuntimeMetamodels().getMappingMetamodel().getEntityDescriptor( Cellular.class );
} }

View File

@ -701,12 +701,6 @@ public abstract class MockSessionFactory
return createEntityPersister(entityName); return createEntityPersister(entityName);
} }
@Override
public EntityPersister locateEntityPersister(String entityName)
throws MappingException {
return createEntityPersister(entityName);
}
@Override @Override
public CollectionPersister getCollectionDescriptor(String role) { public CollectionPersister getCollectionDescriptor(String role) {
return createCollectionPersister(role); return createCollectionPersister(role);