diff --git a/hibernate-core/src/main/java/org/hibernate/internal/AbstractSharedSessionContract.java b/hibernate-core/src/main/java/org/hibernate/internal/AbstractSharedSessionContract.java index d1aadb10ce81..141f18cd032c 100644 --- a/hibernate-core/src/main/java/org/hibernate/internal/AbstractSharedSessionContract.java +++ b/hibernate-core/src/main/java/org/hibernate/internal/AbstractSharedSessionContract.java @@ -1468,7 +1468,7 @@ public QueryImplementor createQuery(CriteriaQuery criteriaQuery) { return createCriteriaQuery( selectStatement, criteriaQuery.getResultType() ); } catch (RuntimeException e) { - if ( getSessionFactory().getJpaMetamodel().getJpaCompliance().isJpaTransactionComplianceEnabled() ) { + if ( getSessionFactory().getSessionFactoryOptions().getJpaCompliance().isJpaTransactionComplianceEnabled() ) { markForRollbackOnly(); } throw getExceptionConverter().convert( e ); @@ -1483,7 +1483,7 @@ public QueryImplementor createQuery(@SuppressWarnings("rawtypes") CriteriaUpd return createCriteriaQuery( (SqmUpdateStatement) criteriaUpdate, null ); } catch (RuntimeException e) { - if ( getSessionFactory().getJpaMetamodel().getJpaCompliance().isJpaTransactionComplianceEnabled() ) { + if ( getSessionFactory().getSessionFactoryOptions().getJpaCompliance().isJpaTransactionComplianceEnabled() ) { markForRollbackOnly(); } throw getExceptionConverter().convert( e ); @@ -1497,7 +1497,7 @@ public QueryImplementor createQuery(@SuppressWarnings("rawtypes") CriteriaDel return createCriteriaQuery( (SqmDeleteStatement) criteriaDelete, null ); } catch (RuntimeException e) { - if ( getSessionFactory().getJpaMetamodel().getJpaCompliance().isJpaTransactionComplianceEnabled() ) { + if ( getSessionFactory().getSessionFactoryOptions().getJpaCompliance().isJpaTransactionComplianceEnabled() ) { markForRollbackOnly(); } throw getExceptionConverter().convert( e ); diff --git a/hibernate-core/src/main/java/org/hibernate/internal/SessionImpl.java b/hibernate-core/src/main/java/org/hibernate/internal/SessionImpl.java index c53d5bd29306..9f54ecb571d1 100644 --- a/hibernate-core/src/main/java/org/hibernate/internal/SessionImpl.java +++ b/hibernate-core/src/main/java/org/hibernate/internal/SessionImpl.java @@ -1755,7 +1755,7 @@ public QueryImplementor createQuery(CriteriaSelect selectQuery) { return createCriteriaQuery( selectStatement, selectStatement.getResultType() ); } catch (RuntimeException e) { - if ( getSessionFactory().getJpaMetamodel().getJpaCompliance().isJpaTransactionComplianceEnabled() ) { + if ( getSessionFactory().getSessionFactoryOptions().getJpaCompliance().isJpaTransactionComplianceEnabled() ) { markForRollbackOnly(); } throw getExceptionConverter().convert( e ); diff --git a/hibernate-core/src/main/java/org/hibernate/loader/ast/internal/AbstractMultiIdEntityLoader.java b/hibernate-core/src/main/java/org/hibernate/loader/ast/internal/AbstractMultiIdEntityLoader.java index 61cd216b0798..9073f15f310b 100644 --- a/hibernate-core/src/main/java/org/hibernate/loader/ast/internal/AbstractMultiIdEntityLoader.java +++ b/hibernate-core/src/main/java/org/hibernate/loader/ast/internal/AbstractMultiIdEntityLoader.java @@ -335,7 +335,7 @@ else if ( unresolvedIds.size() == ids.length ) { protected abstract Object[] toIdArray(List ids); private boolean isIdCoercionEnabled() { - return !getSessionFactory().getJpaMetamodel().getJpaCompliance().isLoadByIdComplianceEnabled(); + return !getSessionFactory().getSessionFactoryOptions().getJpaCompliance().isLoadByIdComplianceEnabled(); } public interface ResolutionConsumer { diff --git a/hibernate-core/src/main/java/org/hibernate/loader/ast/internal/LoaderHelper.java b/hibernate-core/src/main/java/org/hibernate/loader/ast/internal/LoaderHelper.java index c949b10c78c1..6870ef17b519 100644 --- a/hibernate-core/src/main/java/org/hibernate/loader/ast/internal/LoaderHelper.java +++ b/hibernate-core/src/main/java/org/hibernate/loader/ast/internal/LoaderHelper.java @@ -183,7 +183,7 @@ public static K[] normalizeKeys( } final K[] typedArray = createTypedArray( keyClass, keys.length ); - final boolean coerce = !sessionFactory.getJpaMetamodel().getJpaCompliance().isLoadByIdComplianceEnabled(); + final boolean coerce = !sessionFactory.getSessionFactoryOptions().getJpaCompliance().isLoadByIdComplianceEnabled(); if ( !coerce ) { System.arraycopy( keys, 0, typedArray, 0, keys.length ); } diff --git a/hibernate-core/src/main/java/org/hibernate/metamodel/MappingMetamodel.java b/hibernate-core/src/main/java/org/hibernate/metamodel/MappingMetamodel.java index fa7d18022c1a..12a0af57c1c0 100644 --- a/hibernate-core/src/main/java/org/hibernate/metamodel/MappingMetamodel.java +++ b/hibernate-core/src/main/java/org/hibernate/metamodel/MappingMetamodel.java @@ -12,10 +12,8 @@ import org.hibernate.Incubating; import org.hibernate.Internal; import org.hibernate.graph.RootGraph; -import org.hibernate.graph.spi.RootGraphImplementor; import org.hibernate.metamodel.mapping.EmbeddableValuedModelPart; import org.hibernate.metamodel.mapping.MappingModelExpressible; -import org.hibernate.type.BindableType; import org.hibernate.metamodel.model.domain.EntityDomainType; import org.hibernate.metamodel.model.domain.NavigableRole; import org.hibernate.persister.collection.CollectionPersister; @@ -30,6 +28,8 @@ /** * Access to information about the runtime relational O/R mapping model. * + * @apiNote This is an incubating SPI. Its name and package may change. + * * @author Steve Ebersole */ @Incubating @@ -39,23 +39,6 @@ public interface MappingMetamodel extends Metamodel { */ TypeConfiguration getTypeConfiguration(); - // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - // SQM model -> Mapping model - - // todo (6.0) : POC intended for use in SQM to SQL translation - @Internal - MappingModelExpressible resolveMappingExpressible( - SqmExpressible sqmExpressible, - Function tableGroupLocator); - - /** - * Given a Java type, determine the corresponding BindableType to - * use implicitly - */ - BindableType resolveQueryParameterType(Class javaType); - - // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // Entity descriptors @@ -186,7 +169,7 @@ MappingModelExpressible resolveMappingExpressible( // JPA entity graphs RootGraph findNamedGraph(String name); - void addNamedEntityGraph(String graphName, RootGraphImplementor entityGraph); + void addNamedEntityGraph(String graphName, RootGraph entityGraph); void forEachNamedGraph(Consumer> action); RootGraph defaultGraph(String entityName); RootGraph defaultGraph(Class entityJavaType); @@ -196,4 +179,14 @@ MappingModelExpressible resolveMappingExpressible( List> findRootGraphsForType(Class baseEntityJavaType); List> findRootGraphsForType(String baseEntityName); List> findRootGraphsForType(EntityPersister baseEntityDescriptor); + + // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // SQM model -> Mapping model + + // TODO Layer breaker used in SQM to SQL translation. + // Consider moving to QueryEngine or collaborators. + @Internal + MappingModelExpressible resolveMappingExpressible( + SqmExpressible sqmExpressible, + Function tableGroupLocator); } diff --git a/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/internal/SimpleNaturalIdMapping.java b/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/internal/SimpleNaturalIdMapping.java index a7cd687b5296..46b75a2c46d5 100644 --- a/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/internal/SimpleNaturalIdMapping.java +++ b/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/internal/SimpleNaturalIdMapping.java @@ -162,7 +162,7 @@ else if ( incoming instanceof Object[] values ) { } private boolean isLoadByIdComplianceEnabled() { - return getTypeConfiguration().getJpaCompliance().isLoadByIdComplianceEnabled(); + return sessionFactory.getSessionFactoryOptions().getJpaCompliance().isLoadByIdComplianceEnabled(); } @Override diff --git a/hibernate-core/src/main/java/org/hibernate/metamodel/model/domain/JpaMetamodel.java b/hibernate-core/src/main/java/org/hibernate/metamodel/model/domain/JpaMetamodel.java index fe98a3c0ea58..bacf2ee33ca7 100644 --- a/hibernate-core/src/main/java/org/hibernate/metamodel/model/domain/JpaMetamodel.java +++ b/hibernate-core/src/main/java/org/hibernate/metamodel/model/domain/JpaMetamodel.java @@ -9,25 +9,21 @@ import java.util.Set; import jakarta.persistence.EntityGraph; -import jakarta.persistence.metamodel.EmbeddableType; -import jakarta.persistence.metamodel.EntityType; -import jakarta.persistence.metamodel.ManagedType; import jakarta.persistence.metamodel.Metamodel; import org.checkerframework.checker.nullness.qual.Nullable; import org.hibernate.Incubating; -import org.hibernate.graph.spi.RootGraphImplementor; -import org.hibernate.jpa.spi.JpaCompliance; +import org.hibernate.graph.RootGraph; import org.hibernate.metamodel.MappingMetamodel; -import org.hibernate.service.ServiceRegistry; import org.hibernate.type.descriptor.java.EnumJavaType; import org.hibernate.type.descriptor.java.JavaType; -import org.hibernate.type.spi.TypeConfiguration; /** * Extensions to the JPA-defined {@linkplain Metamodel metamodel} of * persistent Java types. * + * @apiNote This is an incubating API. Its name and package may change. + * * @see MappingMetamodel * * @since 6.0 @@ -36,17 +32,6 @@ @Incubating public interface JpaMetamodel extends Metamodel { - // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - // Context - - /** - * todo (6.0) : should we expose JpaMetamodel from TypeConfiguration? - */ - TypeConfiguration getTypeConfiguration(); - - ServiceRegistry getServiceRegistry(); - - // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // Extended features @@ -139,24 +124,13 @@ public interface JpaMetamodel extends Metamodel { // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - // JPA defined bulk accessors + // Entity graphs - @Override - Set> getManagedTypes(); - - @Override - Set> getEntities(); + void addNamedEntityGraph(String graphName, RootGraph entityGraph); - @Override - Set> getEmbeddables(); + RootGraph findEntityGraphByName(String name); - void addNamedEntityGraph(String graphName, RootGraphImplementor entityGraph); - - RootGraphImplementor findEntityGraphByName(String name); - - List> findEntityGraphsByJavaType(Class entityClass); + List> findEntityGraphsByJavaType(Class entityClass); Map> getNamedEntityGraphs(Class entityType); - - JpaCompliance getJpaCompliance(); } diff --git a/hibernate-core/src/main/java/org/hibernate/metamodel/model/domain/NavigableRole.java b/hibernate-core/src/main/java/org/hibernate/metamodel/model/domain/NavigableRole.java index 2c5846786845..60becf973ea5 100644 --- a/hibernate-core/src/main/java/org/hibernate/metamodel/model/domain/NavigableRole.java +++ b/hibernate-core/src/main/java/org/hibernate/metamodel/model/domain/NavigableRole.java @@ -6,6 +6,7 @@ import java.io.Serializable; +import org.hibernate.Incubating; import org.hibernate.internal.util.StringHelper; import org.hibernate.spi.DotIdentifierSequence; import org.hibernate.spi.NavigablePath; @@ -14,17 +15,18 @@ * A compound path which represents a {@link org.hibernate.metamodel.mapping.ModelPart} * and uniquely identifies it with the runtime metamodel. *

- * The {@linkplain #isRoot() root} will name either an + * The {@linkplain #isRoot root} will name either an * {@linkplain org.hibernate.metamodel.MappingMetamodel#getEntityDescriptor entity} or - * {@linkplain org.hibernate.metamodel.MappingMetamodel#getCollectionDescriptor collection} + * {@linkplain org.hibernate.metamodel.MappingMetamodel#getCollectionDescriptor collection}. * - * - * @apiNote Poorly named. Should probably have been `org.hibernate.metamodel.model.mapping.MappingRole`; + * @apiNote This is an incubating SPI type, and will move to {@link org.hibernate.spi}. + * It might be renamed to {@code org.hibernate.metamodel.model.mapping.MappingRole}; * the term "navigable" here is meant to indicate that we could navigate to the specific * {@link org.hibernate.metamodel.mapping.ModelPart} given the role. * * @author Steve Ebersole */ +@Incubating public final class NavigableRole implements DotIdentifierSequence, Serializable { public static final String IDENTIFIER_MAPPER_PROPERTY = NavigablePath.IDENTIFIER_MAPPER_PROPERTY; diff --git a/hibernate-core/src/main/java/org/hibernate/metamodel/model/domain/internal/JpaMetamodelImpl.java b/hibernate-core/src/main/java/org/hibernate/metamodel/model/domain/internal/JpaMetamodelImpl.java index 63575b0618e7..bbe5ae61c501 100644 --- a/hibernate-core/src/main/java/org/hibernate/metamodel/model/domain/internal/JpaMetamodelImpl.java +++ b/hibernate-core/src/main/java/org/hibernate/metamodel/model/domain/internal/JpaMetamodelImpl.java @@ -27,10 +27,10 @@ import org.hibernate.boot.registry.classloading.spi.ClassLoadingException; import org.hibernate.boot.spi.MetadataImplementor; import org.hibernate.engine.spi.SessionFactoryImplementor; +import org.hibernate.graph.RootGraph; import org.hibernate.graph.spi.RootGraphImplementor; import org.hibernate.internal.CoreLogging; import org.hibernate.internal.CoreMessageLogger; -import org.hibernate.jpa.spi.JpaCompliance; import org.hibernate.mapping.MappedSuperclass; import org.hibernate.mapping.PersistentClass; import org.hibernate.metamodel.MappingMetamodel; @@ -111,21 +111,14 @@ public JpaMetamodelImpl( this.classLoaderService = serviceRegistry.getService( ClassLoaderService.class ); } - @Override public TypeConfiguration getTypeConfiguration() { return typeConfiguration; } - @Override public ServiceRegistry getServiceRegistry() { return serviceRegistry; } - @Override - public JpaCompliance getJpaCompliance() { - return typeConfiguration.getJpaCompliance(); - } - @Override public @Nullable ManagedDomainType findManagedType(@Nullable String typeName) { //noinspection unchecked @@ -394,31 +387,31 @@ private Field getJavaField(String className, String fieldName) throws NoSuchFiel } @Override - public void addNamedEntityGraph(String graphName, RootGraphImplementor entityGraph) { - final EntityGraph old = entityGraphMap.put( graphName, entityGraph.makeImmutableCopy( graphName ) ); + public void addNamedEntityGraph(String graphName, RootGraph entityGraph) { + final RootGraphImplementor rootGraph = (RootGraphImplementor) entityGraph; + final EntityGraph old = entityGraphMap.put( graphName, rootGraph.makeImmutableCopy( graphName ) ); if ( old != null ) { log.debugf( "EntityGraph being replaced on EntityManagerFactory for name %s", graphName ); } } @Override - @SuppressWarnings("unchecked") - public RootGraphImplementor findEntityGraphByName(String name) { - return (RootGraphImplementor) entityGraphMap.get( name ); + public RootGraphImplementor findEntityGraphByName(String name) { + return entityGraphMap.get( name ); } @Override - public List> findEntityGraphsByJavaType(Class entityClass) { + public List> findEntityGraphsByJavaType(Class entityClass) { final EntityDomainType entityType = entity( entityClass ); if ( entityType == null ) { throw new IllegalArgumentException( "Given class is not an entity: " + entityClass.getName() ); } else { - final List> results = new ArrayList<>(); - for ( RootGraphImplementor entityGraph : entityGraphMap.values() ) { + final List> results = new ArrayList<>(); + for ( var entityGraph : entityGraphMap.values() ) { if ( entityGraph.appliesTo( entityType ) ) { - @SuppressWarnings("unchecked") - final RootGraphImplementor result = (RootGraphImplementor) entityGraph; + @SuppressWarnings("unchecked") // safe, we just checked + var result = (RootGraphImplementor) entityGraph; results.add( result ); } } @@ -434,10 +427,11 @@ public Map> getNamedEntityGraphs(Class e } else { final Map> results = new HashMap<>(); - for ( RootGraphImplementor entityGraph : entityGraphMap.values() ) { + for ( var entityGraph : entityGraphMap.values() ) { if ( entityGraph.appliesTo( entityType ) ) { - //noinspection unchecked - results.put( entityGraph.getName(), (EntityGraph) entityGraph ); + @SuppressWarnings("unchecked") // safe, we just checked + var graph = (EntityGraph) entityGraph; + results.put( entityGraph.getName(), graph ); } } return results; @@ -736,7 +730,9 @@ private EntityDomainType locateOrBuildEntityType( MetadataContext context, final TypeConfiguration typeConfiguration) { @SuppressWarnings("unchecked") - final EntityDomainType entityType = (EntityDomainType) context.locateEntityType( persistentClass ); + final EntityDomainType entityType = + (EntityDomainType) + context.locateEntityType( persistentClass ); return entityType == null ? buildEntityType( persistentClass, context, typeConfiguration ) : entityType; diff --git a/hibernate-core/src/main/java/org/hibernate/metamodel/model/domain/internal/MappingMetamodelImpl.java b/hibernate-core/src/main/java/org/hibernate/metamodel/model/domain/internal/MappingMetamodelImpl.java index ef0094988810..30571856fe48 100644 --- a/hibernate-core/src/main/java/org/hibernate/metamodel/model/domain/internal/MappingMetamodelImpl.java +++ b/hibernate-core/src/main/java/org/hibernate/metamodel/model/domain/internal/MappingMetamodelImpl.java @@ -23,11 +23,9 @@ import org.hibernate.boot.spi.MetadataImplementor; import org.hibernate.cache.spi.CacheImplementor; import org.hibernate.graph.RootGraph; -import org.hibernate.graph.spi.RootGraphImplementor; import org.hibernate.internal.CoreLogging; import org.hibernate.internal.CoreMessageLogger; import org.hibernate.internal.util.collections.ArrayHelper; -import org.hibernate.jpa.spi.JpaCompliance; import org.hibernate.mapping.Collection; import org.hibernate.mapping.Component; import org.hibernate.mapping.MappedSuperclass; @@ -37,7 +35,6 @@ import org.hibernate.metamodel.mapping.MappingModelExpressible; import org.hibernate.metamodel.mapping.internal.MappingModelCreationProcess; import org.hibernate.metamodel.model.domain.BasicDomainType; -import org.hibernate.metamodel.model.domain.DomainType; import org.hibernate.metamodel.model.domain.EmbeddableDomainType; import org.hibernate.metamodel.model.domain.EntityDomainType; import org.hibernate.metamodel.model.domain.JpaMetamodel; @@ -565,12 +562,12 @@ public CollectionPersister findCollectionDescriptor(String role) { } @Override - public void addNamedEntityGraph(String graphName, RootGraphImplementor entityGraph) { + public void addNamedEntityGraph(String graphName, RootGraph entityGraph) { jpaMetamodel.addNamedEntityGraph( graphName, entityGraph ); } @Override - public RootGraphImplementor findEntityGraphByName(String name) { + public RootGraph findEntityGraphByName(String name) { return jpaMetamodel.findEntityGraphByName( name ); } @@ -580,15 +577,10 @@ public Map> getNamedEntityGraphs(Class e } @Override - public List> findEntityGraphsByJavaType(Class entityClass) { + public List> findEntityGraphsByJavaType(Class entityClass) { return jpaMetamodel.findEntityGraphsByJavaType( entityClass ); } - @Override - public JpaCompliance getJpaCompliance() { - return jpaMetamodel.getJpaCompliance(); - } - @Override public RootGraph findNamedGraph(String name) { return findEntityGraphByName( name ); @@ -639,8 +631,8 @@ public MappingModelExpressible resolveMappingExpressible( SqmExpressible sqmExpressible, Function tableGroupLocator) { if ( sqmExpressible instanceof SqmPath sqmPath ) { - final DomainType sqmPathType = sqmPath.getResolvedModel().getPathType(); - if ( sqmPathType instanceof MappingModelExpressible mappingExpressible ) { + if ( sqmPath.getResolvedModel().getPathType() + instanceof MappingModelExpressible mappingExpressible ) { return mappingExpressible; } final NavigablePath navigablePath = sqmPath.getNavigablePath(); @@ -656,7 +648,8 @@ else if ( sqmExpressible instanceof BasicType basicType ) { } else if ( sqmExpressible instanceof BasicDomainType ) { - return getTypeConfiguration().getBasicTypeForJavaType( sqmExpressible.getRelationalJavaType().getJavaType() ); + return getTypeConfiguration() + .getBasicTypeForJavaType( sqmExpressible.getRelationalJavaType().getJavaType() ); } else if ( sqmExpressible instanceof BasicSqmPathSource @@ -712,41 +705,6 @@ else if ( sqmExpressible instanceof TupleType tupleType ) { } } - @Override - public BindableType resolveQueryParameterType(Class javaClass) { - final BasicType basicType = getTypeConfiguration().getBasicTypeForJavaType( javaClass ); - // For enums, we simply don't know the exact mapping if there is no basic type registered - if ( basicType != null || javaClass.isEnum() ) { - return basicType; - } - - final ManagedDomainType managedType = jpaMetamodel.findManagedType( javaClass ); - if ( managedType != null ) { - return (BindableType) managedType; - } - - final JavaTypeRegistry javaTypeRegistry = getTypeConfiguration().getJavaTypeRegistry(); - final JavaType javaType = javaTypeRegistry.findDescriptor( javaClass ); - if ( javaType != null ) { - final JdbcType recommendedJdbcType = - javaType.getRecommendedJdbcType( getTypeConfiguration().getCurrentBaseSqlTypeIndicators() ); - if ( recommendedJdbcType != null ) { - return getTypeConfiguration().getBasicTypeRegistry().resolve( javaType, recommendedJdbcType ); - } - } - - if ( javaClass.isArray() && javaTypeRegistry.findDescriptor( javaClass.getComponentType() ) != null ) { - final JavaType resolvedJavaType = javaTypeRegistry.resolveDescriptor( javaClass ); - final JdbcType recommendedJdbcType = - resolvedJavaType.getRecommendedJdbcType( getTypeConfiguration().getCurrentBaseSqlTypeIndicators() ); - if ( recommendedJdbcType != null ) { - return getTypeConfiguration().getBasicTypeRegistry().resolve( resolvedJavaType, recommendedJdbcType ); - } - } - - return null; - } - @Override public Set getCollectionRolesByEntityParticipant(String entityName) { return collectionRolesByEntityParticipant.get( entityName ); @@ -769,7 +727,40 @@ public String[] getAllCollectionRoles() { @Override public BindableType resolveParameterBindType(Class javaType) { - return resolveQueryParameterType( javaType ); + final TypeConfiguration typeConfiguration = getTypeConfiguration(); + + final BasicType basicType = typeConfiguration.getBasicTypeForJavaType( javaType ); + // For enums, we simply don't know the exact mapping if there is no basic type registered + if ( basicType != null || javaType.isEnum() ) { + return basicType; + } + + final ManagedDomainType managedType = jpaMetamodel.findManagedType( javaType ); + if ( managedType != null ) { + return (BindableType) managedType; + } + + final JavaTypeRegistry javaTypeRegistry = typeConfiguration.getJavaTypeRegistry(); + final JavaType javaType1 = javaTypeRegistry.findDescriptor( javaType ); + if ( javaType1 != null ) { + final JdbcType recommendedJdbcType = + javaType1.getRecommendedJdbcType( typeConfiguration.getCurrentBaseSqlTypeIndicators() ); + if ( recommendedJdbcType != null ) { + return typeConfiguration.getBasicTypeRegistry().resolve( javaType1, recommendedJdbcType ); + } + } + + if ( javaType.isArray() + && javaTypeRegistry.findDescriptor( javaType.getComponentType() ) != null ) { + final JavaType resolvedJavaType = javaTypeRegistry.resolveDescriptor( javaType ); + final JdbcType recommendedJdbcType = + resolvedJavaType.getRecommendedJdbcType( typeConfiguration.getCurrentBaseSqlTypeIndicators() ); + if ( recommendedJdbcType != null ) { + return typeConfiguration.getBasicTypeRegistry().resolve( resolvedJavaType, recommendedJdbcType ); + } + } + + return null; } @Override diff --git a/hibernate-core/src/main/java/org/hibernate/metamodel/model/domain/spi/JpaMetamodelImplementor.java b/hibernate-core/src/main/java/org/hibernate/metamodel/model/domain/spi/JpaMetamodelImplementor.java index b8ba60abac5b..ff8eb366fd4a 100644 --- a/hibernate-core/src/main/java/org/hibernate/metamodel/model/domain/spi/JpaMetamodelImplementor.java +++ b/hibernate-core/src/main/java/org/hibernate/metamodel/model/domain/spi/JpaMetamodelImplementor.java @@ -4,6 +4,7 @@ */ package org.hibernate.metamodel.model.domain.spi; +import org.hibernate.graph.spi.RootGraphImplementor; import org.hibernate.metamodel.MappingMetamodel; import org.hibernate.metamodel.model.domain.JpaMetamodel; @@ -14,4 +15,7 @@ */ public interface JpaMetamodelImplementor extends JpaMetamodel { MappingMetamodel getMappingMetamodel(); + + @Override + RootGraphImplementor findEntityGraphByName(String name); } diff --git a/hibernate-core/src/main/java/org/hibernate/query/hql/internal/SemanticQueryBuilder.java b/hibernate-core/src/main/java/org/hibernate/query/hql/internal/SemanticQueryBuilder.java index 35f7c22f67df..e1cf905ceabd 100644 --- a/hibernate-core/src/main/java/org/hibernate/query/hql/internal/SemanticQueryBuilder.java +++ b/hibernate-core/src/main/java/org/hibernate/query/hql/internal/SemanticQueryBuilder.java @@ -3685,7 +3685,6 @@ public Object visitAdditionExpression(HqlParser.AdditionExpressionContext ctx) { operator, left, right, - creationContext.getJpaMetamodel(), creationContext.getNodeBuilder() ); } @@ -3713,7 +3712,6 @@ public Object visitMultiplicationExpression(HqlParser.MultiplicationExpressionCo operator, left, right, - creationContext.getJpaMetamodel(), creationContext.getNodeBuilder() ); } @@ -5779,7 +5777,6 @@ else if ( lhsExpressible.getRelationalJavaType() instanceof StringJavaType BinaryArithmeticOperator.SUBTRACT, end, start, - creationContext.getJpaMetamodel(), creationContext.getNodeBuilder() ), new SqmLiteral<>( @@ -5787,7 +5784,6 @@ else if ( lhsExpressible.getRelationalJavaType() instanceof StringJavaType creationContext.getNodeBuilder().getIntegerType(), creationContext.getNodeBuilder() ), - creationContext.getJpaMetamodel(), creationContext.getNodeBuilder() ) ), diff --git a/hibernate-core/src/main/java/org/hibernate/query/hql/internal/SqmPathRegistryImpl.java b/hibernate-core/src/main/java/org/hibernate/query/hql/internal/SqmPathRegistryImpl.java index ca76519f51a3..a08d1f513570 100644 --- a/hibernate-core/src/main/java/org/hibernate/query/hql/internal/SqmPathRegistryImpl.java +++ b/hibernate-core/src/main/java/org/hibernate/query/hql/internal/SqmPathRegistryImpl.java @@ -51,7 +51,7 @@ public class SqmPathRegistryImpl implements SqmPathRegistry { public SqmPathRegistryImpl(SqmCreationProcessingState associatedProcessingState) { this.associatedProcessingState = associatedProcessingState; - this.jpaCompliance = associatedProcessingState.getCreationState().getCreationContext().getJpaMetamodel().getJpaCompliance(); + this.jpaCompliance = associatedProcessingState.getCreationState().getCreationContext().getNodeBuilder().getJpaCompliance(); } @Override diff --git a/hibernate-core/src/main/java/org/hibernate/query/sqm/tree/expression/SqmBinaryArithmetic.java b/hibernate-core/src/main/java/org/hibernate/query/sqm/tree/expression/SqmBinaryArithmetic.java index aae475728703..c1ba5fbf1d2a 100644 --- a/hibernate-core/src/main/java/org/hibernate/query/sqm/tree/expression/SqmBinaryArithmetic.java +++ b/hibernate-core/src/main/java/org/hibernate/query/sqm/tree/expression/SqmBinaryArithmetic.java @@ -4,7 +4,6 @@ */ package org.hibernate.query.sqm.tree.expression; -import org.hibernate.metamodel.model.domain.JpaMetamodel; import org.hibernate.query.sqm.BinaryArithmeticOperator; import org.hibernate.query.sqm.NodeBuilder; import org.hibernate.query.sqm.SemanticQueryWalker; @@ -29,11 +28,10 @@ public SqmBinaryArithmetic( BinaryArithmeticOperator operator, SqmExpression lhsOperand, SqmExpression rhsOperand, - JpaMetamodel domainModel, NodeBuilder nodeBuilder) { //noinspection unchecked super( - (SqmBindableType) domainModel.getTypeConfiguration().resolveArithmeticType( + (SqmBindableType) nodeBuilder.getTypeConfiguration().resolveArithmeticType( lhsOperand.getExpressible(), rhsOperand.getExpressible(), operator diff --git a/hibernate-core/src/main/java/org/hibernate/type/spi/TypeConfiguration.java b/hibernate-core/src/main/java/org/hibernate/type/spi/TypeConfiguration.java index 231abcc41e18..8d0d363ebb6d 100644 --- a/hibernate-core/src/main/java/org/hibernate/type/spi/TypeConfiguration.java +++ b/hibernate-core/src/main/java/org/hibernate/type/spi/TypeConfiguration.java @@ -252,7 +252,10 @@ public ServiceRegistry getServiceRegistry() { /** * Obtain the {@link JpaCompliance} setting. + * + * @deprecated No longer used */ + @Deprecated(since = "7.0", forRemoval = true) public JpaCompliance getJpaCompliance() { return scope.getJpaCompliance(); } diff --git a/tooling/metamodel-generator/src/main/java/org/hibernate/processor/validation/MockSessionFactory.java b/tooling/metamodel-generator/src/main/java/org/hibernate/processor/validation/MockSessionFactory.java index c15d430ab8e7..e3e659fc08df 100644 --- a/tooling/metamodel-generator/src/main/java/org/hibernate/processor/validation/MockSessionFactory.java +++ b/tooling/metamodel-generator/src/main/java/org/hibernate/processor/validation/MockSessionFactory.java @@ -46,7 +46,6 @@ import org.hibernate.engine.spi.SessionFactoryImplementor; import org.hibernate.graph.spi.RootGraphImplementor; import org.hibernate.jpa.internal.MutableJpaComplianceImpl; -import org.hibernate.jpa.spi.JpaCompliance; import org.hibernate.jpa.spi.MutableJpaCompliance; import org.hibernate.mapping.Property; import org.hibernate.metamodel.AttributeClassification; @@ -913,11 +912,6 @@ public > E enumValue(EnumJavaType enumType, String enumValu public @Nullable Set getEnumTypesForValue(String enumValue) { return MockSessionFactory.this.getEnumTypesForValue(enumValue); } - - @Override - public JpaCompliance getJpaCompliance() { - return jpaCompliance; - } } @Nullable Set getEnumTypesForValue(String value) {