diff --git a/hibernate-core/src/main/java/org/hibernate/boot/BootLogging.java b/hibernate-core/src/main/java/org/hibernate/boot/BootLogging.java index 11a31753703d..d827eeeafec8 100644 --- a/hibernate-core/src/main/java/org/hibernate/boot/BootLogging.java +++ b/hibernate-core/src/main/java/org/hibernate/boot/BootLogging.java @@ -42,7 +42,7 @@ public interface BootLogging extends BasicLogger { BootLogging BOOT_LOGGER = Logger.getMessageLogger( MethodHandles.lookup(), BootLogging.class, NAME ); @LogMessage(level = WARN) - @Message(id = 160101, value = "Duplicate generator name %s") + @Message(id = 160101, value = "Duplicate generator name: '%s'") void duplicateGeneratorName(String name); diff --git a/hibernate-core/src/main/java/org/hibernate/boot/internal/InFlightMetadataCollectorImpl.java b/hibernate-core/src/main/java/org/hibernate/boot/internal/InFlightMetadataCollectorImpl.java index 7388aa0a2475..ca339794514a 100644 --- a/hibernate-core/src/main/java/org/hibernate/boot/internal/InFlightMetadataCollectorImpl.java +++ b/hibernate-core/src/main/java/org/hibernate/boot/internal/InFlightMetadataCollectorImpl.java @@ -665,7 +665,7 @@ public java.util.Collection collectTableMappings() { @Override public void addIdentifierGenerator(IdentifierGeneratorDefinition generator) { if ( generator == null || generator.getName() == null ) { - throw new IllegalArgumentException( "ID generator object or name is null." ); + throw new IllegalArgumentException( "Id generator object or name is null" ); } else if ( !generator.getName().isEmpty() && !defaultIdentifierGeneratorNames.contains( generator.getName() ) ) { @@ -678,7 +678,7 @@ else if ( !generator.getName().isEmpty() + "' to false " ); } else { - BOOT_LOGGER.duplicateGeneratorName( old.getName() ); + BOOT_LOGGER.duplicateGeneratorName( old.getName() ); } } } diff --git a/hibernate-core/src/main/java/org/hibernate/boot/model/internal/AnnotationBinder.java b/hibernate-core/src/main/java/org/hibernate/boot/model/internal/AnnotationBinder.java index 593d1a20fc1c..348230f0fc3c 100644 --- a/hibernate-core/src/main/java/org/hibernate/boot/model/internal/AnnotationBinder.java +++ b/hibernate-core/src/main/java/org/hibernate/boot/model/internal/AnnotationBinder.java @@ -44,11 +44,16 @@ import static org.hibernate.boot.model.internal.AnnotatedClassType.ENTITY; import static org.hibernate.boot.model.internal.EntityBinder.bindEntityClass; import static org.hibernate.boot.model.internal.FilterDefBinder.bindFilterDefs; +import static org.hibernate.boot.model.internal.GeneratorBinder.registerGlobalGenerators; import static org.hibernate.boot.model.internal.GeneratorParameters.interpretSequenceGenerator; import static org.hibernate.boot.model.internal.GeneratorParameters.interpretTableGenerator; import static org.hibernate.boot.model.internal.InheritanceState.getInheritanceStateOfSuperEntity; import static org.hibernate.boot.model.internal.InheritanceState.getSuperclassInheritanceState; import static org.hibernate.boot.BootLogging.BOOT_LOGGER; +import static org.hibernate.boot.model.internal.QueryBinder.bindNamedStoredProcedureQuery; +import static org.hibernate.boot.model.internal.QueryBinder.bindNativeQuery; +import static org.hibernate.boot.model.internal.QueryBinder.bindQuery; +import static org.hibernate.boot.model.internal.QueryBinder.bindSqlResultSetMapping; import static org.hibernate.internal.util.StringHelper.unqualify; import static org.hibernate.mapping.MetadataSource.ANNOTATIONS; @@ -98,7 +103,7 @@ public static void bindDefaults(MetadataBuildingContext context) { // result-set-mappings globalRegistrations.getSqlResultSetMappingRegistrations().forEach( (name, mappingRegistration) -> { - QueryBinder.bindSqlResultSetMapping( mappingRegistration.configuration(), context, true ); + bindSqlResultSetMapping( mappingRegistration.configuration(), context, true ); } ); @@ -106,15 +111,15 @@ public static void bindDefaults(MetadataBuildingContext context) { // queries globalRegistrations.getNamedQueryRegistrations().forEach( (name, queryRegistration) -> { - QueryBinder.bindQuery( queryRegistration.configuration(), context, true, null ); + bindQuery( queryRegistration.configuration(), context, true, null ); } ); globalRegistrations.getNamedNativeQueryRegistrations().forEach( (name, queryRegistration) -> { - QueryBinder.bindNativeQuery( queryRegistration.configuration(), context, null, true ); + bindNativeQuery( queryRegistration.configuration(), context, null, true ); } ); globalRegistrations.getNamedStoredProcedureQueryRegistrations().forEach( (name, queryRegistration) -> { - QueryBinder.bindNamedStoredProcedureQuery( queryRegistration.configuration(), context, true ); + bindNamedStoredProcedureQuery( queryRegistration.configuration(), context, true ); } ); } @@ -130,7 +135,7 @@ public static void bindPackage(ClassLoaderService cls, String packageName, Metad modelsContext( context ).getClassDetailsRegistry() .resolveClassDetails( pack.getName() + ".package-info" ); - GeneratorBinder.registerGlobalGenerators( packageInfo, context ); + registerGlobalGenerators( packageInfo, context ); bindTypeDescriptorRegistrations( packageInfo, context ); bindEmbeddableInstantiatorRegistrations( packageInfo, context ); @@ -153,7 +158,7 @@ private static void bindNamedEntityGraphs(ClassDetails packageInfoClassDetails, packageInfoClassDetails.forEachRepeatedAnnotationUsages( HibernateAnnotations.NAMED_ENTITY_GRAPH, modelsContext( context ), - (annotation) -> collector.addNamedEntityGraph( new NamedEntityGraphDefinition( + annotation -> collector.addNamedEntityGraph( new NamedEntityGraphDefinition( annotation.name(), null, NamedEntityGraphDefinition.Source.PARSED, new NamedGraphCreatorParsed( annotation ) @@ -172,13 +177,13 @@ private static void bindNamedHibernateQueries(AnnotationTarget annotationTarget, annotationTarget.forEachRepeatedAnnotationUsages( HibernateAnnotations.NAMED_QUERY, sourceModelContext, - (usage) -> QueryBinder.bindQuery( usage, context, annotationTarget ) + (usage) -> bindQuery( usage, context, annotationTarget ) ); annotationTarget.forEachRepeatedAnnotationUsages( HibernateAnnotations.NAMED_NATIVE_QUERY, sourceModelContext, - (usage) -> QueryBinder.bindNativeQuery( usage, context, annotationTarget ) + (usage) -> bindNativeQuery( usage, context, annotationTarget ) ); } @@ -188,25 +193,25 @@ private static void bindNamedJpaQueries(AnnotationTarget annotationTarget, Metad annotationTarget.forEachRepeatedAnnotationUsages( JpaAnnotations.SQL_RESULT_SET_MAPPING, sourceModelContext, - (usage) -> QueryBinder.bindSqlResultSetMapping( usage, context,false ) + (usage) -> bindSqlResultSetMapping( usage, context,false ) ); annotationTarget.forEachRepeatedAnnotationUsages( JpaAnnotations.NAMED_QUERY, sourceModelContext, - (usage) -> QueryBinder.bindQuery( usage, context, false, annotationTarget ) + (usage) -> bindQuery( usage, context, false, annotationTarget ) ); annotationTarget.forEachRepeatedAnnotationUsages( JpaAnnotations.NAMED_NATIVE_QUERY, sourceModelContext, - (usage) -> QueryBinder.bindNativeQuery( usage, context, annotationTarget, false ) + (usage) -> bindNativeQuery( usage, context, annotationTarget, false ) ); annotationTarget.forEachRepeatedAnnotationUsages( JpaAnnotations.NAMED_STORED_PROCEDURE_QUERY, sourceModelContext, - (usage) -> QueryBinder.bindNamedStoredProcedureQuery( usage, context, false ) + (usage) -> bindNamedStoredProcedureQuery( usage, context, false ) ); } @@ -292,7 +297,7 @@ private static void handleJdbcTypeRegistration( MetadataBuildingContext context, ManagedBeanRegistry managedBeanRegistry, JdbcTypeRegistration annotation) { - final JdbcType jdbcType = getBean( context, managedBeanRegistry, annotation.value() ); + final var jdbcType = getBean( context, managedBeanRegistry, annotation.value() ); context.getMetadataCollector() .addJdbcTypeRegistration( jdbcTypeCode( annotation, jdbcType ), jdbcType ); } @@ -417,9 +422,9 @@ private static void bindFetchProfile(FetchProfile fetchProfile, MetadataBuilding final String name = fetchProfile.name(); if ( reuseOrCreateFetchProfile( context, name ) ) { for ( var fetchOverride : fetchProfile.fetchOverrides() ) { - final FetchType type = fetchOverride.fetch(); - final FetchMode mode = fetchOverride.mode(); - if ( type == FetchType.LAZY && mode == FetchMode.JOIN ) { + final FetchType fetchType = fetchOverride.fetch(); + final FetchMode fetchMode = fetchOverride.mode(); + if ( fetchType == FetchType.LAZY && fetchMode == FetchMode.JOIN ) { throw new AnnotationException( "Fetch profile '" + name + "' has a '@FetchOverride' with 'fetch=LAZY' and 'mode=JOIN'" @@ -461,25 +466,25 @@ public static Map buildInheritanceStates( MetadataBuildingContext buildingContext) { final Map inheritanceStatePerClass = new HashMap<>( orderedClasses.size() ); final var collector = buildingContext.getMetadataCollector(); - for ( ClassDetails clazz : orderedClasses ) { - final var superclassState = getSuperclassInheritanceState( clazz, inheritanceStatePerClass ); - final var state = new InheritanceState( clazz, inheritanceStatePerClass, buildingContext ); - final var classType = collector.getClassType( clazz ); - if ( classType == EMBEDDABLE && !clazz.hasDirectAnnotationUsage( Imported.class ) ) { - final String className = clazz.getName(); + for ( var classDetails : orderedClasses ) { + final var superclassState = getSuperclassInheritanceState( classDetails, inheritanceStatePerClass ); + final var state = new InheritanceState( classDetails, inheritanceStatePerClass, buildingContext ); + final var classType = collector.getClassType( classDetails ); + if ( classType == EMBEDDABLE && !classDetails.hasDirectAnnotationUsage( Imported.class ) ) { + final String className = classDetails.getName(); collector.addImport( unqualify( className ), className ); } if ( superclassState != null ) { //the classes are ordered thus preventing an NPE superclassState.setHasSiblings( true ); - final var superEntityState = getInheritanceStateOfSuperEntity( clazz, inheritanceStatePerClass ); + final var superEntityState = getInheritanceStateOfSuperEntity( classDetails, inheritanceStatePerClass ); if ( superEntityState != null ) { state.setHasParents( true ); if ( classType == EMBEDDABLE ) { - collector.registerEmbeddableSubclass( superEntityState.getClassDetails(), clazz ); + collector.registerEmbeddableSubclass( superEntityState.getClassDetails(), classDetails ); } } - logMixedInheritance( clazz, superclassState, state ); + logMixedInheritance( classDetails, superclassState, state ); if ( superclassState.getType() != null ) { state.setType( superclassState.getType() ); } @@ -488,7 +493,7 @@ public static Map buildInheritanceStates( case ENTITY: case MAPPED_SUPERCLASS: case EMBEDDABLE: - inheritanceStatePerClass.put( clazz, state ); + inheritanceStatePerClass.put( classDetails, state ); } } return inheritanceStatePerClass; diff --git a/hibernate-core/src/main/java/org/hibernate/query/internal/FetchMementoHbmStandard.java b/hibernate-core/src/main/java/org/hibernate/query/internal/FetchMementoHbmStandard.java index fbeed960f73c..0f10294cf2a3 100644 --- a/hibernate-core/src/main/java/org/hibernate/query/internal/FetchMementoHbmStandard.java +++ b/hibernate-core/src/main/java/org/hibernate/query/internal/FetchMementoHbmStandard.java @@ -11,7 +11,6 @@ import org.hibernate.AssertionFailure; import org.hibernate.LockMode; -import org.hibernate.metamodel.mapping.CollectionPart; import org.hibernate.metamodel.mapping.EntityMappingType; import org.hibernate.metamodel.mapping.PluralAttributeMapping; import org.hibernate.metamodel.mapping.internal.ToOneAttributeMapping; @@ -110,41 +109,34 @@ private FetchBuilder resolve( dynamicFetchBuilder.getColumnAliases().toArray( new String[0] ) ); } - else { + else if ( fetchBuilder instanceof CompleteFetchBuilderEntityValuedModelPart completeFetchBuilder ) { resultBuilder.addIdColumnAliases( - ((CompleteFetchBuilderEntityValuedModelPart) fetchBuilder).getColumnAliases() - .toArray( new String[0] ) + completeFetchBuilder.getColumnAliases().toArray( new String[0] ) ); } + else { + throw new AssertionFailure( "Unexpected fetch builder type" ); + } fetchBuilderMap.put( pluralAttributeMapping.getElementDescriptor(), fetchBuilder ); } else if ( attrName.equals( "index" ) ) { - final CollectionPart indexDescriptor = pluralAttributeMapping.getIndexDescriptor(); + final var indexDescriptor = pluralAttributeMapping.getIndexDescriptor(); resultBuilder.addFetchBuilder( indexDescriptor, fetchBuilder ); - fetchBuilderMap.put( - indexDescriptor, - fetchBuilder - ); + fetchBuilderMap.put( indexDescriptor, fetchBuilder ); } else if ( attrName.startsWith( ELEMENT_PREFIX ) ) { - final Fetchable attributeMapping = (Fetchable) partMappingType.findByPath( - attrName.substring( ELEMENT_PREFIX_LENGTH ) ); + final var attributeMapping = + (Fetchable) partMappingType.findByPath( attrName.substring( ELEMENT_PREFIX_LENGTH ) ); resultBuilder.addFetchBuilder( attributeMapping, fetchBuilder ); - fetchBuilderMap.put( - attributeMapping, - fetchBuilder - ); + fetchBuilderMap.put( attributeMapping, fetchBuilder ); } else { - final Fetchable attributeMapping = (Fetchable) partMappingType.findByPath( attrName ); + final var attributeMapping = (Fetchable) partMappingType.findByPath( attrName ); resultBuilder.addFetchBuilder( attributeMapping, fetchBuilder ); - fetchBuilderMap.put( - attributeMapping, - fetchBuilder - ); + fetchBuilderMap.put( attributeMapping, fetchBuilder ); } } ); @@ -170,15 +162,13 @@ private FetchBuilder resolve( fetchMemento.resolve( this, querySpaceConsumer, context ) ) ); - final DynamicResultBuilderEntityStandard resultBuilder; - resultBuilder = new DynamicResultBuilderEntityStandard( - toOneAttributeMapping.getEntityMappingType(), - tableAlias, - navigablePath - ); - fetchBuilderMap.forEach( (fetchable, fetchBuilder) -> - resultBuilder.addFetchBuilder( fetchable, fetchBuilder ) - ); + final var resultBuilder = + new DynamicResultBuilderEntityStandard( + toOneAttributeMapping.getEntityMappingType(), + tableAlias, + navigablePath + ); + fetchBuilderMap.forEach( resultBuilder::addFetchBuilder ); return new DynamicFetchBuilderLegacy( tableAlias, ownerTableAlias, diff --git a/hibernate-core/src/main/java/org/hibernate/query/internal/NamedObjectRepositoryImpl.java b/hibernate-core/src/main/java/org/hibernate/query/internal/NamedObjectRepositoryImpl.java index 7ff4481bbb1a..29d75160cf22 100644 --- a/hibernate-core/src/main/java/org/hibernate/query/internal/NamedObjectRepositoryImpl.java +++ b/hibernate-core/src/main/java/org/hibernate/query/internal/NamedObjectRepositoryImpl.java @@ -307,7 +307,7 @@ public void validateNamedQueries(QueryEngine queryEngine) { @Override public Map checkNamedQueries(QueryEngine queryEngine) { - Map errors = new HashMap<>(); + final Map errors = new HashMap<>(); final var interpretationCache = queryEngine.getInterpretationCache(); final var hqlTranslator = queryEngine.getHqlTranslator(); diff --git a/hibernate-core/src/main/java/org/hibernate/query/internal/NamedResultSetMappingMementoImpl.java b/hibernate-core/src/main/java/org/hibernate/query/internal/NamedResultSetMappingMementoImpl.java index e74ec3d1eb89..0e0dc72703de 100644 --- a/hibernate-core/src/main/java/org/hibernate/query/internal/NamedResultSetMappingMementoImpl.java +++ b/hibernate-core/src/main/java/org/hibernate/query/internal/NamedResultSetMappingMementoImpl.java @@ -4,7 +4,6 @@ */ package org.hibernate.query.internal; -import java.util.Collections; import java.util.List; import java.util.function.Consumer; @@ -12,6 +11,8 @@ import org.hibernate.query.named.ResultMemento; import org.hibernate.query.results.ResultSetMapping; +import static java.util.Collections.unmodifiableList; + /** * Standard {@link NamedResultSetMappingMemento} implementation * @@ -34,7 +35,7 @@ public String getName() { } public List getResultMementos() { - return Collections.unmodifiableList( resultMementos ); + return unmodifiableList( resultMementos ); } @Override diff --git a/hibernate-core/src/main/java/org/hibernate/query/internal/NullPrecedenceHelper.java b/hibernate-core/src/main/java/org/hibernate/query/internal/NullPrecedenceHelper.java index d603ec10028a..8a5bf1a0999a 100644 --- a/hibernate-core/src/main/java/org/hibernate/query/internal/NullPrecedenceHelper.java +++ b/hibernate-core/src/main/java/org/hibernate/query/internal/NullPrecedenceHelper.java @@ -47,7 +47,7 @@ public static boolean isDefaultOrdering( * @return The recognized NullPrecedence, or {@code null} */ public static Nulls parse(String name) { - for ( Nulls value : Nulls.values() ) { + for ( var value : Nulls.values() ) { if ( value.name().equalsIgnoreCase( name ) ) { return value; } @@ -64,7 +64,7 @@ public static Nulls parse(String name) { * @return The recognized NullPrecedence, or {@code defaultValue}. */ public static Nulls parse(String name, Nulls defaultValue) { - final Nulls value = parse( name ); + final var value = parse( name ); return value != null ? value : defaultValue; } diff --git a/hibernate-core/src/main/java/org/hibernate/query/internal/ParameterMetadataImpl.java b/hibernate-core/src/main/java/org/hibernate/query/internal/ParameterMetadataImpl.java index 8fff8455d456..77fcf35a9fe2 100644 --- a/hibernate-core/src/main/java/org/hibernate/query/internal/ParameterMetadataImpl.java +++ b/hibernate-core/src/main/java/org/hibernate/query/internal/ParameterMetadataImpl.java @@ -6,7 +6,6 @@ import java.util.ArrayList; import java.util.Collection; -import java.util.Collections; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; @@ -32,8 +31,10 @@ import org.checkerframework.checker.nullness.qual.Nullable; import static java.util.Collections.emptyList; +import static java.util.Collections.emptyMap; import static java.util.Collections.emptySet; import static java.util.Collections.unmodifiableSet; +import static org.hibernate.internal.util.StringHelper.join; import static org.hibernate.internal.util.collections.CollectionHelper.isEmpty; /** @@ -53,10 +54,10 @@ public class ParameterMetadataImpl implements ParameterMetadataImplementor { private final @Nullable QueryParameterBindingsImpl queryParameterBindingsTemplate; private ParameterMetadataImpl() { - this.queryParameters = Collections.emptyMap(); - this.queryParametersByName = null; - this.queryParametersByPosition = null; - this.queryParameterBindingsTemplate = null; + queryParameters = emptyMap(); + queryParametersByName = null; + queryParametersByPosition = null; + queryParameterBindingsTemplate = null; } public ParameterMetadataImpl(Map, List>> queryParameters) { @@ -67,13 +68,13 @@ public ParameterMetadataImpl(Map, List(); } tempQueryParametersByPosition.put( queryParameter.getPosition(), queryParameter ); } - else if ( queryParameter.getName() != null ) { + else if ( queryParameter.isNamed() ) { if ( tempQueryParametersByName == null ) { tempQueryParametersByName = new HashMap<>(); } @@ -84,21 +85,21 @@ else if ( queryParameter.getName() != null ) { if ( tempQueryParametersByPosition != null ) { verifyOrdinalParamLabels( tempQueryParametersByPosition.keySet() ); } - this.queryParametersByPosition = tempQueryParametersByPosition; - this.queryParametersByName = tempQueryParametersByName; - this.queryParameterBindingsTemplate = QueryParameterBindingsImpl.from( this, null ); + queryParametersByPosition = tempQueryParametersByPosition; + queryParametersByName = tempQueryParametersByName; + queryParameterBindingsTemplate = QueryParameterBindingsImpl.from( this, null ); } public ParameterMetadataImpl( Map> positionalQueryParameters, Map> namedQueryParameters) { assert !isEmpty( positionalQueryParameters ) || !isEmpty( namedQueryParameters ); - this.queryParameters = new LinkedHashMap<>(); + queryParameters = new LinkedHashMap<>(); Map> tempQueryParametersByName = null; Map> tempQueryParametersByPosition = null; if ( positionalQueryParameters != null ) { for ( var queryParameter : positionalQueryParameters.values() ) { - this.queryParameters.put( queryParameter, emptyList() ); + queryParameters.put( queryParameter, emptyList() ); if ( tempQueryParametersByPosition == null ) { tempQueryParametersByPosition = new HashMap<>(); } @@ -113,13 +114,13 @@ public ParameterMetadataImpl( if ( tempQueryParametersByName == null ) { tempQueryParametersByName = new HashMap<>(); } - this.queryParameters.put( queryParameter, emptyList() ); + queryParameters.put( queryParameter, emptyList() ); tempQueryParametersByName.put( queryParameter.getName(), queryParameter ); } } - this.queryParametersByPosition = tempQueryParametersByPosition; - this.queryParametersByName = tempQueryParametersByName; - this.queryParameterBindingsTemplate = QueryParameterBindingsImpl.from( this, null ); + queryParametersByPosition = tempQueryParametersByPosition; + queryParametersByName = tempQueryParametersByName; + queryParameterBindingsTemplate = QueryParameterBindingsImpl.from( this, null ); } private static void verifyOrdinalParamLabels(Set labels) { @@ -148,7 +149,7 @@ private static void verifyOrdinalParamLabels(Set labels) { "Gap between '?%s' and '?%s' in ordinal parameter labels [%s] (ordinal parameters must be labelled sequentially)", lastPosition, sortedPosition, - StringHelper.join( ",", sortedLabels.iterator() ) + join( ",", sortedLabels.iterator() ) ) ); } @@ -224,7 +225,8 @@ public

QueryParameterImplementor

resolve(Parameter

param) { return parameterImplementor; } - final String errorMessage = "Could not resolve jakarta.persistence.Parameter '" + param + "' to org.hibernate.query.QueryParameter"; + final String errorMessage = + "Could not resolve jakarta.persistence.Parameter '" + param + "' to org.hibernate.query.QueryParameter"; throw new IllegalArgumentException( errorMessage, new UnknownParameterException( errorMessage ) diff --git a/hibernate-core/src/main/java/org/hibernate/query/internal/QueryEngineImpl.java b/hibernate-core/src/main/java/org/hibernate/query/internal/QueryEngineImpl.java index 374a08ed0101..cf03730bd0e8 100644 --- a/hibernate-core/src/main/java/org/hibernate/query/internal/QueryEngineImpl.java +++ b/hibernate-core/src/main/java/org/hibernate/query/internal/QueryEngineImpl.java @@ -12,7 +12,6 @@ import org.hibernate.engine.jdbc.spi.JdbcServices; import org.hibernate.engine.query.spi.NativeQueryInterpreter; import org.hibernate.internal.util.config.ConfigurationException; -import org.hibernate.internal.util.config.ConfigurationHelper; import org.hibernate.metamodel.MappingMetamodel; import org.hibernate.metamodel.model.domain.JpaMetamodel; import org.hibernate.type.BindingContext; @@ -41,6 +40,8 @@ import static java.util.Comparator.comparingInt; import static org.hibernate.cfg.QuerySettings.QUERY_PLAN_CACHE_ENABLED; import static org.hibernate.cfg.QuerySettings.QUERY_PLAN_CACHE_MAX_SIZE; +import static org.hibernate.internal.util.config.ConfigurationHelper.getBoolean; +import static org.hibernate.internal.util.config.ConfigurationHelper.getInteger; /** * Aggregation and encapsulation of the components Hibernate uses @@ -97,30 +98,30 @@ private static HqlTranslator resolveHqlTranslator( QueryEngineOptions options, Dialect dialect, SqmCreationContext sqmCreationContext) { - final var sqmCreationOptions = new SqmCreationOptionsStandard( options ); - if ( options.getCustomHqlTranslator() != null ) { - return options.getCustomHqlTranslator(); + final var customHqlTranslator = options.getCustomHqlTranslator(); + if ( customHqlTranslator != null ) { + return customHqlTranslator; } - else if ( dialect.getHqlTranslator() != null ) { - return dialect.getHqlTranslator(); - } - else { - return new StandardHqlTranslator( sqmCreationContext, sqmCreationOptions ); + final var hqlTranslator = dialect.getHqlTranslator(); + if ( hqlTranslator != null ) { + return hqlTranslator; } + return new StandardHqlTranslator( sqmCreationContext, + new SqmCreationOptionsStandard( options ) ); } private static SqmTranslatorFactory resolveSqmTranslatorFactory( QueryEngineOptions runtimeOptions, Dialect dialect) { - if ( runtimeOptions.getCustomSqmTranslatorFactory() != null ) { - return runtimeOptions.getCustomSqmTranslatorFactory(); - } - else if ( dialect.getSqmTranslatorFactory() != null ) { - return dialect.getSqmTranslatorFactory(); + final var customSqmTranslatorFactory = runtimeOptions.getCustomSqmTranslatorFactory(); + if ( customSqmTranslatorFactory != null ) { + return customSqmTranslatorFactory; } - else { - return new StandardSqmTranslatorFactory(); + final var sqmTranslatorFactory1 = dialect.getSqmTranslatorFactory(); + if ( sqmTranslatorFactory1 != null ) { + return sqmTranslatorFactory1; } + return new StandardSqmTranslatorFactory(); } private static SqmFunctionRegistry createFunctionRegistry( @@ -171,14 +172,14 @@ private static List sortedFunctionContributors(ServiceRegis public static QueryInterpretationCache buildInterpretationCache( ServiceRegistry serviceRegistry, Map properties) { - final boolean useCache = ConfigurationHelper.getBoolean( + final boolean useCache = getBoolean( QUERY_PLAN_CACHE_ENABLED, properties, // enabled by default true ); - final Integer explicitMaxPlanSize = ConfigurationHelper.getInteger( + final Integer explicitMaxPlanSize = getInteger( QUERY_PLAN_CACHE_MAX_SIZE, properties ); @@ -186,18 +187,18 @@ public static QueryInterpretationCache buildInterpretationCache( //Let's avoid some confusion and check settings consistency: final int appliedMaxPlanSize = explicitMaxPlanSize == null - ? QueryEngine.DEFAULT_QUERY_PLAN_MAX_COUNT + ? DEFAULT_QUERY_PLAN_MAX_COUNT : explicitMaxPlanSize; if ( !useCache && explicitMaxPlanSize != null && appliedMaxPlanSize > 0 ) { throw new ConfigurationException( "Inconsistent configuration: '" + QUERY_PLAN_CACHE_MAX_SIZE - + "' can only be set to a greater than zero value when '" + + "' can only be set to a value greater than zero when '" + QUERY_PLAN_CACHE_ENABLED + "' is enabled" ); } if ( appliedMaxPlanSize < 0 ) { throw new ConfigurationException( "Inconsistent configuration: '" + QUERY_PLAN_CACHE_MAX_SIZE - + "' can't be set to a negative value. To disable the query plan cache set '" - + QUERY_PLAN_CACHE_ENABLED + "' to 'false'" ); + + "' can't be set to a negative value (to disable the query plan cache set '" + + QUERY_PLAN_CACHE_ENABLED + "' to 'false')" ); } return useCache diff --git a/hibernate-core/src/main/java/org/hibernate/query/internal/QueryInterpretationCacheDisabledImpl.java b/hibernate-core/src/main/java/org/hibernate/query/internal/QueryInterpretationCacheDisabledImpl.java index aeb038779d7f..e9d96bcf5372 100644 --- a/hibernate-core/src/main/java/org/hibernate/query/internal/QueryInterpretationCacheDisabledImpl.java +++ b/hibernate-core/src/main/java/org/hibernate/query/internal/QueryInterpretationCacheDisabledImpl.java @@ -4,7 +4,6 @@ */ package org.hibernate.query.internal; -import java.util.concurrent.TimeUnit; import java.util.function.Function; import java.util.function.Supplier; @@ -21,6 +20,9 @@ import org.hibernate.service.ServiceRegistry; import org.hibernate.stat.spi.StatisticsImplementor; +import static java.util.concurrent.TimeUnit.MICROSECONDS; +import static java.util.concurrent.TimeUnit.NANOSECONDS; + /** * @author Steve Ebersole */ @@ -82,25 +84,24 @@ public void cacheNonSelectQueryPlan(Key key, NonSelectQueryPlan plan) { public HqlInterpretation resolveHqlInterpretation( String queryString, Class expectedResultType, HqlTranslator translator) { final var statistics = getStatistics(); - final boolean stats = statistics.isStatisticsEnabled(); - final long startTime = stats ? System.nanoTime() : 0L; + final boolean statisticsEnabled = statistics.isStatisticsEnabled(); + final long startTime = statisticsEnabled ? System.nanoTime() : 0L; final var sqmStatement = translator.translate( queryString, expectedResultType ); - final DomainParameterXref domainParameterXref; - final ParameterMetadataImplementor parameterMetadata; - if ( sqmStatement.getSqmParameters().isEmpty() ) { - domainParameterXref = DomainParameterXref.EMPTY; - parameterMetadata = ParameterMetadataImpl.EMPTY; - } - else { - domainParameterXref = DomainParameterXref.from( sqmStatement ); - parameterMetadata = new ParameterMetadataImpl( domainParameterXref.getQueryParameters() ); - } - - if ( stats ) { + final boolean hasParameters = sqmStatement.getSqmParameters().isEmpty(); + final var domainParameterXref = + hasParameters + ? DomainParameterXref.EMPTY + : DomainParameterXref.from( sqmStatement ); + final var parameterMetadata = + hasParameters + ? ParameterMetadataImpl.EMPTY + : new ParameterMetadataImpl( domainParameterXref.getQueryParameters() ); + + if ( statisticsEnabled ) { final long endTime = System.nanoTime(); - final long microseconds = TimeUnit.MICROSECONDS.convert( endTime - startTime, TimeUnit.NANOSECONDS ); + final long microseconds = MICROSECONDS.convert( endTime - startTime, NANOSECONDS ); statistics.queryCompiled( queryString, microseconds ); } diff --git a/hibernate-core/src/main/java/org/hibernate/query/internal/QueryInterpretationCacheStandardImpl.java b/hibernate-core/src/main/java/org/hibernate/query/internal/QueryInterpretationCacheStandardImpl.java index 3c01f55c02ea..7c3759472b80 100644 --- a/hibernate-core/src/main/java/org/hibernate/query/internal/QueryInterpretationCacheStandardImpl.java +++ b/hibernate-core/src/main/java/org/hibernate/query/internal/QueryInterpretationCacheStandardImpl.java @@ -84,12 +84,12 @@ public SelectQueryPlan resolveSelectQueryPlan( Function> creator) { LOG.tracef( "Resolving cached query plan for [%s]", key ); final var statistics = getStatistics(); - final boolean stats = statistics.isStatisticsEnabled(); + final boolean statisticsEnabled = statistics.isStatisticsEnabled(); @SuppressWarnings("unchecked") final var cached = (SelectQueryPlan) queryPlanCache.get( key ); if ( cached != null ) { - if ( stats ) { + if ( statisticsEnabled ) { statistics.queryPlanCacheHit( key.getQueryString() ); } return cached; @@ -97,7 +97,7 @@ public SelectQueryPlan resolveSelectQueryPlan( final var plan = creator.apply( key ); queryPlanCache.put( key.prepareForStore(), plan ); - if ( stats ) { + if ( statisticsEnabled ) { statistics.queryPlanCacheMiss( key.getQueryString() ); } return plan; @@ -120,9 +120,10 @@ public HqlInterpretation resolveHqlInterpretation( LOG.tracef( "Resolving HQL interpretation for [%s]", queryString ); final var statistics = getStatistics(); - final Object cacheKey = expectedResultType != null - ? new HqlInterpretationCacheKey( queryString, expectedResultType ) - : queryString; + final Object cacheKey = + expectedResultType != null + ? new HqlInterpretationCacheKey( queryString, expectedResultType ) + : queryString; final var existing = hqlInterpretationCache.get( cacheKey ); if ( existing != null ) { @@ -159,8 +160,8 @@ protected static HqlInterpretation createHqlInterpretation( Class expectedResultType, HqlTranslator translator, StatisticsImplementor statistics) { - final boolean stats = statistics.isStatisticsEnabled(); - final long startTime = stats ? System.nanoTime() : 0L; + final boolean statisticsEnabled = statistics.isStatisticsEnabled(); + final long startTime = statisticsEnabled ? System.nanoTime() : 0L; final var sqmStatement = translator.translate( queryString, expectedResultType ); @@ -175,7 +176,7 @@ protected static HqlInterpretation createHqlInterpretation( parameterMetadata = new ParameterMetadataImpl( domainParameterXref.getQueryParameters() ); } - if ( stats ) { + if ( statisticsEnabled ) { final long endTime = System.nanoTime(); final long microseconds = TimeUnit.MICROSECONDS.convert( endTime - startTime, TimeUnit.NANOSECONDS ); statistics.queryCompiled( queryString, microseconds ); diff --git a/hibernate-core/src/main/java/org/hibernate/query/internal/QueryParameterBindingImpl.java b/hibernate-core/src/main/java/org/hibernate/query/internal/QueryParameterBindingImpl.java index 0ec51eacdb43..cce084860746 100644 --- a/hibernate-core/src/main/java/org/hibernate/query/internal/QueryParameterBindingImpl.java +++ b/hibernate-core/src/main/java/org/hibernate/query/internal/QueryParameterBindingImpl.java @@ -5,12 +5,10 @@ package org.hibernate.query.internal; import java.util.Collection; -import java.util.Iterator; import org.hibernate.HibernateException; import org.hibernate.engine.spi.SessionFactoryImplementor; import org.hibernate.metamodel.mapping.BasicValuedMapping; -import org.hibernate.metamodel.mapping.JdbcMapping; import org.hibernate.metamodel.mapping.MappingModelExpressible; import org.hibernate.metamodel.mapping.ModelPart; import org.hibernate.type.BindableType; @@ -21,12 +19,13 @@ import org.hibernate.query.sqm.NodeBuilder; import org.hibernate.query.sqm.tree.expression.NullSqmExpressible; import org.hibernate.type.descriptor.java.JavaType; -import org.hibernate.type.descriptor.java.JavaTypeHelper; -import org.hibernate.type.internal.BindingTypeHelper; import org.hibernate.type.spi.TypeConfiguration; import jakarta.persistence.TemporalType; +import static org.hibernate.type.descriptor.java.JavaTypeHelper.isTemporal; +import static org.hibernate.type.internal.BindingTypeHelper.resolveTemporalPrecision; + /** * The standard implementation of {@link QueryParameterBinding}. * @@ -219,7 +218,7 @@ public void setBindValues(Collection values) { this.bindValue = null; this.bindValues = values; - final Iterator iterator = values.iterator(); + final var iterator = values.iterator(); T value = null; while ( value == null && iterator.hasNext() ) { value = iterator.next(); @@ -249,8 +248,8 @@ public void setBindValues( private void setExplicitTemporalPrecision(TemporalType precision) { explicitTemporalPrecision = precision; - if ( bindType == null || JavaTypeHelper.isTemporal( determineJavaType( bindType ) ) ) { - bindType = BindingTypeHelper.resolveTemporalPrecision( precision, bindType, getCriteriaBuilder() ); + if ( bindType == null || isTemporal( determineJavaType( bindType ) ) ) { + bindType = resolveTemporalPrecision( precision, bindType, getCriteriaBuilder() ); } } @@ -274,7 +273,7 @@ public boolean setType(MappingModelExpressible type) { return changed; } else if ( type instanceof BasicValuedMapping basicValuedMapping ) { - final JdbcMapping jdbcMapping = basicValuedMapping.getJdbcMapping(); + final var jdbcMapping = basicValuedMapping.getJdbcMapping(); if ( jdbcMapping instanceof BindableType ) { final boolean changed = bindType != null && jdbcMapping != bindType; bindType = (BindableType) jdbcMapping; @@ -347,6 +346,7 @@ private static boolean canValueBeCoerced(BindableType bindType) { } private static boolean canBindValueBeSet(Object value, BindableType bindType) { - return value != null && ( bindType == null || bindType instanceof NullSqmExpressible ); + return value != null + && ( bindType == null || bindType instanceof NullSqmExpressible ); } } diff --git a/hibernate-core/src/main/java/org/hibernate/query/internal/QueryParameterBindingsImpl.java b/hibernate-core/src/main/java/org/hibernate/query/internal/QueryParameterBindingsImpl.java index 7e75dac8041f..438d30648512 100644 --- a/hibernate-core/src/main/java/org/hibernate/query/internal/QueryParameterBindingsImpl.java +++ b/hibernate-core/src/main/java/org/hibernate/query/internal/QueryParameterBindingsImpl.java @@ -70,11 +70,12 @@ private QueryParameterBindingsImpl( } for ( var entry : parameterBindingMap.entrySet() ) { final var queryParameter = entry.getKey(); + final var parameterBinding = entry.getValue(); if ( queryParameter.isNamed() ) { - parameterBindingMapByNameOrPosition.put( queryParameter.getName(), entry.getValue() ); + parameterBindingMapByNameOrPosition.put( queryParameter.getName(), parameterBinding ); } - else if ( queryParameter.getPosition() != null ) { - parameterBindingMapByNameOrPosition.put( queryParameter.getPosition(), entry.getValue() ); + else if ( queryParameter.isOrdinal() ) { + parameterBindingMapByNameOrPosition.put( queryParameter.getPosition(), parameterBinding ); } } } @@ -93,12 +94,13 @@ private QueryParameterBindingsImpl(QueryParameterBindingsImpl original, SessionF parameterBindingMap.put( entry.getKey(), createBinding( sessionFactory, entry.getValue() ) ); } for ( var entry : parameterBindingMap.entrySet() ) { - final QueryParameter queryParameter = entry.getKey(); + final var queryParameter = entry.getKey(); + final var parameterBinding = entry.getValue(); if ( queryParameter.isNamed() ) { - parameterBindingMapByNameOrPosition.put( queryParameter.getName(), entry.getValue() ); + parameterBindingMapByNameOrPosition.put( queryParameter.getName(), parameterBinding ); } else if ( queryParameter.getPosition() != null ) { - parameterBindingMapByNameOrPosition.put( queryParameter.getPosition(), entry.getValue() ); + parameterBindingMapByNameOrPosition.put( queryParameter.getPosition(), parameterBinding ); } } } @@ -155,7 +157,7 @@ public

QueryParameterBinding

getBinding(String name) { public void validate() { for ( var entry : parameterBindingMap.entrySet() ) { if ( !entry.getValue().isBound() ) { - final QueryParameter queryParameter = entry.getKey(); + final var queryParameter = entry.getKey(); if ( queryParameter.isNamed() ) { throw new QueryParameterException( "No argument for named parameter ':" + queryParameter.getName() + "'" ); } diff --git a/hibernate-core/src/main/java/org/hibernate/query/internal/QueryParameterNamedImpl.java b/hibernate-core/src/main/java/org/hibernate/query/internal/QueryParameterNamedImpl.java index 804c3d808167..66102b60e914 100644 --- a/hibernate-core/src/main/java/org/hibernate/query/internal/QueryParameterNamedImpl.java +++ b/hibernate-core/src/main/java/org/hibernate/query/internal/QueryParameterNamedImpl.java @@ -56,11 +56,11 @@ public NamedQueryMemento.ParameterMemento toMemento() { } @Override - public boolean equals(Object o) { - if ( this == o ) { + public boolean equals(Object object) { + if ( this == object ) { return true; } - else if ( !(o instanceof QueryParameterNamedImpl that) ) { + else if ( !(object instanceof QueryParameterNamedImpl that) ) { return false; } else { diff --git a/hibernate-core/src/main/java/org/hibernate/query/internal/ResultMementoBasicStandard.java b/hibernate-core/src/main/java/org/hibernate/query/internal/ResultMementoBasicStandard.java index 8acb99602485..ddba63c2b754 100644 --- a/hibernate-core/src/main/java/org/hibernate/query/internal/ResultMementoBasicStandard.java +++ b/hibernate-core/src/main/java/org/hibernate/query/internal/ResultMementoBasicStandard.java @@ -13,7 +13,6 @@ import org.hibernate.query.results.internal.complete.CompleteResultBuilderBasicValuedConverted; import org.hibernate.query.results.internal.complete.CompleteResultBuilderBasicValuedStandard; import org.hibernate.resource.beans.spi.ManagedBean; -import org.hibernate.resource.beans.spi.ManagedBeanRegistry; import org.hibernate.type.BasicType; import org.hibernate.type.CustomType; import org.hibernate.type.descriptor.java.BasicJavaType; @@ -69,21 +68,23 @@ public class ResultMementoBasicStandard implements ResultMementoBasic { public ResultMementoBasicStandard( ColumnResult definition, ResultSetMappingResolutionContext context) { - this.explicitColumnName = definition.name(); + explicitColumnName = definition.name(); final var definedType = definition.type(); if ( void.class == definedType ) { builder = new CompleteResultBuilderBasicValuedStandard( explicitColumnName, null, null ); } else { - final TypeConfiguration typeConfiguration = context.getTypeConfiguration(); - final ManagedBeanRegistry managedBeanRegistry = context.getSessionFactory().getManagedBeanRegistry(); + final var typeConfiguration = context.getTypeConfiguration(); + final var managedBeanRegistry = context.getSessionFactory().getManagedBeanRegistry(); if ( AttributeConverter.class.isAssignableFrom( definedType ) ) { @SuppressWarnings("unchecked") final var converterClass = (Class>) definedType; final var converterBean = managedBeanRegistry.getBean( converterClass ); - final var converterJtd = typeConfiguration.getJavaTypeRegistry().resolveDescriptor( converterClass ); + final var converterJtd = + typeConfiguration.getJavaTypeRegistry() + .resolveDescriptor( converterClass ); final var parameterizedType = extractAttributeConverterParameterizedType( converterBean.getBeanClass() ); @@ -101,8 +102,9 @@ public ResultMementoBasicStandard( final JavaType explicitJavaType; // see if this is a registered BasicType... - final BasicType registeredBasicType = - typeConfiguration.getBasicTypeRegistry().getRegisteredType( definedType.getName() ); + final var registeredBasicType = + typeConfiguration.getBasicTypeRegistry() + .getRegisteredType( definedType.getName() ); if ( registeredBasicType != null ) { explicitType = registeredBasicType; explicitJavaType = registeredBasicType.getJavaTypeDescriptor(); @@ -111,14 +113,16 @@ public ResultMementoBasicStandard( final var jtdRegistry = typeConfiguration.getJavaTypeRegistry(); final var registeredJtd = jtdRegistry.resolveDescriptor( definedType ); if ( BasicType.class.isAssignableFrom( registeredJtd.getJavaTypeClass() ) ) { - final ManagedBean> typeBean = - (ManagedBean) managedBeanRegistry.getBean( registeredJtd.getJavaTypeClass() ); + final var typeBean = + (ManagedBean>) + managedBeanRegistry.getBean( registeredJtd.getJavaTypeClass() ); explicitType = typeBean.getBeanInstance(); explicitJavaType = explicitType.getJavaTypeDescriptor(); } else if ( UserType.class.isAssignableFrom( registeredJtd.getJavaTypeClass() ) ) { - final ManagedBean> userTypeBean = - (ManagedBean) managedBeanRegistry.getBean( registeredJtd.getJavaTypeClass() ); + final var userTypeBean = + (ManagedBean>) + managedBeanRegistry.getBean( registeredJtd.getJavaTypeClass() ); // todo (6.0) : is this the best approach? or should we keep a Class -> @Type mapping somewhere? explicitType = new CustomType<>( userTypeBean.getBeanInstance(), typeConfiguration ); explicitJavaType = explicitType.getJavaTypeDescriptor(); diff --git a/hibernate-core/src/main/java/org/hibernate/query/internal/ResultMementoEntityJpa.java b/hibernate-core/src/main/java/org/hibernate/query/internal/ResultMementoEntityJpa.java index 0e7e3a1d628a..3755ee787d6c 100644 --- a/hibernate-core/src/main/java/org/hibernate/query/internal/ResultMementoEntityJpa.java +++ b/hibernate-core/src/main/java/org/hibernate/query/internal/ResultMementoEntityJpa.java @@ -7,11 +7,8 @@ import java.util.HashMap; import java.util.Map; import java.util.function.Consumer; -import java.util.function.Function; import org.hibernate.LockMode; -import org.hibernate.metamodel.mapping.BasicValuedModelPart; -import org.hibernate.metamodel.mapping.EntityDiscriminatorMapping; import org.hibernate.metamodel.mapping.EntityMappingType; import org.hibernate.query.named.FetchMemento; import org.hibernate.query.named.FetchMementoBasic; @@ -56,24 +53,11 @@ public NavigablePath getNavigablePath() { public ResultBuilderEntityValued resolve( Consumer querySpaceConsumer, ResultSetMappingResolutionContext context) { - final EntityDiscriminatorMapping discriminatorMapping = entityDescriptor.getDiscriminatorMapping(); - final FetchBuilderBasicValued discriminatorFetchBuilder; - if ( discriminatorMapping == null || !entityDescriptor.hasSubclasses() ) { - assert discriminatorMemento == null; - discriminatorFetchBuilder = null; - } - else { - if ( discriminatorMemento != null ) { - discriminatorFetchBuilder = (FetchBuilderBasicValued) discriminatorMemento.resolve( this, querySpaceConsumer, context ); - } - else { - discriminatorFetchBuilder = new ImplicitFetchBuilderBasic( navigablePath, discriminatorMapping ); - } - } final HashMap explicitFetchBuilderMap = new HashMap<>(); - // If there are no explicit fetches, we don't register DELAYED builders to get implicit fetching of all basic fetchables + // If there are no explicit fetches, we don't register DELAYED + // builders to get implicit fetching of all basic fetchables if ( !explicitFetchMementoMap.isEmpty() ) { explicitFetchMementoMap.forEach( (relativePath, fetchMemento) -> explicitFetchBuilderMap.put( @@ -83,19 +67,19 @@ public ResultBuilderEntityValued resolve( ); final boolean isEnhancedForLazyLoading = entityDescriptor.getRepresentationStrategy().isBytecodeEnhanced(); - // Implicit basic fetches are DELAYED by default, so register fetch builders for the remaining basic fetchables + // Implicit basic fetches are DELAYED by default, so register + // fetch builders for the remaining basic fetchables entityDescriptor.forEachAttributeMapping( attributeMapping -> { - final BasicValuedModelPart basicPart = attributeMapping.asBasicValuedModelPart(); + final var basicPart = attributeMapping.asBasicValuedModelPart(); if ( basicPart != null ) { - final Function fetchBuilderCreator = k -> new DelayedFetchBuilderBasicPart( - navigablePath.append( k.getFetchableName() ), - basicPart, - isEnhancedForLazyLoading - ); explicitFetchBuilderMap.computeIfAbsent( attributeMapping, - fetchBuilderCreator + k -> new DelayedFetchBuilderBasicPart( + navigablePath.append( k.getFetchableName() ), + basicPart, + isEnhancedForLazyLoading + ) ); } } @@ -106,8 +90,24 @@ public ResultBuilderEntityValued resolve( navigablePath, entityDescriptor, lockMode, - discriminatorFetchBuilder, + discriminatorFetchBuilder( querySpaceConsumer, context ), explicitFetchBuilderMap ); } + + private FetchBuilderBasicValued discriminatorFetchBuilder( + Consumer querySpaceConsumer, + ResultSetMappingResolutionContext context) { + final var discriminatorMapping = entityDescriptor.getDiscriminatorMapping(); + if ( discriminatorMapping == null || !entityDescriptor.hasSubclasses() ) { + assert discriminatorMemento == null; + return null; + } + else { + return discriminatorMemento == null + ? new ImplicitFetchBuilderBasic( navigablePath, discriminatorMapping ) + : (FetchBuilderBasicValued) + discriminatorMemento.resolve( this, querySpaceConsumer, context ); + } + } } diff --git a/hibernate-core/src/main/java/org/hibernate/query/internal/ResultMementoEntityStandard.java b/hibernate-core/src/main/java/org/hibernate/query/internal/ResultMementoEntityStandard.java index 901816a8fea6..81613128de55 100644 --- a/hibernate-core/src/main/java/org/hibernate/query/internal/ResultMementoEntityStandard.java +++ b/hibernate-core/src/main/java/org/hibernate/query/internal/ResultMementoEntityStandard.java @@ -59,12 +59,7 @@ public ResultBuilderEntityValued resolve( Consumer querySpaceConsumer, ResultSetMappingResolutionContext context) { - final FetchBuilderBasicValued discriminatorResultBuilder = discriminatorMemento != null - ? (FetchBuilderBasicValued) discriminatorMemento.resolve( this, querySpaceConsumer, context ) - : null; - final HashMap fetchBuilderMap = new HashMap<>(); - fetchMementoMap.forEach( (attrName, fetchMemento) -> fetchBuilderMap.put( (Fetchable) entityDescriptor.findByPath( attrName ), @@ -77,7 +72,10 @@ public ResultBuilderEntityValued resolve( navigablePath, entityDescriptor, lockMode, - discriminatorResultBuilder, + discriminatorMemento == null + ? null + : (FetchBuilderBasicValued) + discriminatorMemento.resolve( this, querySpaceConsumer, context ), fetchBuilderMap ); } diff --git a/hibernate-core/src/main/java/org/hibernate/query/internal/ResultMementoInstantiationStandard.java b/hibernate-core/src/main/java/org/hibernate/query/internal/ResultMementoInstantiationStandard.java index 02a222997510..476ecd1c10f7 100644 --- a/hibernate-core/src/main/java/org/hibernate/query/internal/ResultMementoInstantiationStandard.java +++ b/hibernate-core/src/main/java/org/hibernate/query/internal/ResultMementoInstantiationStandard.java @@ -4,16 +4,17 @@ */ package org.hibernate.query.internal; -import java.util.Collections; import java.util.List; import java.util.function.Consumer; -import org.hibernate.internal.util.collections.CollectionHelper; import org.hibernate.query.named.ResultMementoInstantiation; import org.hibernate.query.results.ResultBuilder; import org.hibernate.query.results.internal.complete.CompleteResultBuilderInstantiation; import org.hibernate.type.descriptor.java.JavaType; +import static java.util.Collections.unmodifiableList; +import static org.hibernate.internal.util.collections.CollectionHelper.arrayList; + /** * @author Steve Ebersole */ @@ -34,21 +35,19 @@ public JavaType getInstantiatedJavaType() { } public List getArgumentMementos() { - return Collections.unmodifiableList( argumentMementos ); + return unmodifiableList( argumentMementos ); } @Override public ResultBuilder resolve( Consumer querySpaceConsumer, ResultSetMappingResolutionContext context) { - final List argumentBuilders = CollectionHelper.arrayList( argumentMementos.size() ); - + final List argumentBuilders = arrayList( argumentMementos.size() ); argumentMementos.forEach( argumentMemento -> argumentBuilders.add( argumentMemento.resolve( querySpaceConsumer, context ) ) ); - return new CompleteResultBuilderInstantiation( instantiatedJtd, argumentBuilders ); } } diff --git a/hibernate-core/src/main/java/org/hibernate/sql/exec/internal/JdbcSelectExecutorStandardImpl.java b/hibernate-core/src/main/java/org/hibernate/sql/exec/internal/JdbcSelectExecutorStandardImpl.java index eb4c7c3a80ab..51bcde658445 100644 --- a/hibernate-core/src/main/java/org/hibernate/sql/exec/internal/JdbcSelectExecutorStandardImpl.java +++ b/hibernate-core/src/main/java/org/hibernate/sql/exec/internal/JdbcSelectExecutorStandardImpl.java @@ -4,7 +4,6 @@ */ package org.hibernate.sql.exec.internal; -import java.sql.Connection; import java.util.List; import java.util.Set; import java.util.concurrent.TimeUnit; @@ -14,8 +13,6 @@ import org.hibernate.engine.spi.SessionFactoryImplementor; import org.hibernate.engine.spi.SharedSessionContractImplementor; import org.hibernate.query.TupleTransformer; -import org.hibernate.query.spi.QueryOptions; -import org.hibernate.resource.jdbc.spi.LogicalConnectionImplementor; import org.hibernate.sql.exec.spi.ExecutionContext; import org.hibernate.sql.exec.spi.JdbcParameterBindings; import org.hibernate.sql.exec.spi.JdbcSelectExecutor; @@ -37,7 +34,6 @@ import org.hibernate.sql.results.jdbc.spi.JdbcValuesMetadata; import org.hibernate.sql.results.jdbc.spi.JdbcValuesSourceProcessingOptions; import org.hibernate.sql.results.spi.ResultsConsumer; -import org.hibernate.sql.results.spi.RowReader; import org.hibernate.sql.results.spi.RowTransformer; import org.hibernate.stat.spi.StatisticsImplementor; import org.hibernate.type.BasicType; @@ -136,7 +132,7 @@ private T doExecuteQuery( statementCreator, resultCountEstimate ); - final JdbcValues jdbcValues = resolveJdbcValuesSource( + final var jdbcValues = resolveJdbcValuesSource( executionContext.getQueryIdentifier( deferredResultSetAccess.getFinalSql() ), jdbcSelect, resultsConsumer.canResultsBeCached(), @@ -149,10 +145,11 @@ private T doExecuteQuery( } final var session = executionContext.getSession(); + final var factory = session.getFactory(); final boolean stats; long startTime = 0; - final var statistics = session.getFactory().getStatistics(); + final var statistics = factory.getStatistics(); if ( executionContext.hasQueryExecutionToBeAddedToStatistics() && jdbcValues instanceof JdbcValuesResultSetImpl ) { stats = statistics.isStatisticsEnabled(); @@ -195,8 +192,8 @@ public boolean shouldReturnProxies() { executionContext ); - final RowReader rowReader = ResultsHelper.createRowReader( - session.getFactory(), + final var rowReader = ResultsHelper.createRowReader( + factory, rowTransformer, domainResultType, jdbcValues @@ -204,15 +201,10 @@ public boolean shouldReturnProxies() { final var rowProcessingState = new RowProcessingStateStandardImpl( valuesProcessingState, executionContext, rowReader, jdbcValues ); - final LogicalConnectionImplementor logicalConnection = session.getJdbcCoordinator().getLogicalConnection(); - final SessionFactoryImplementor sessionFactory = session.getSessionFactory(); + final var logicalConnection = session.getJdbcCoordinator().getLogicalConnection(); - final Connection connection = logicalConnection.getPhysicalConnection(); - final StatementAccessImpl statementAccess = new StatementAccessImpl( - connection, - logicalConnection, - sessionFactory - ); + final var connection = logicalConnection.getPhysicalConnection(); + final var statementAccess = new StatementAccessImpl( connection, logicalConnection, factory ); jdbcSelect.performPreActions( statementAccess, connection, executionContext ); try { @@ -286,7 +278,7 @@ protected JdbcValues resolveJdbcValuesSource( final CacheMode cacheMode = resolveCacheMode( executionContext ); final var mappingProducer = jdbcSelect.getJdbcValuesMappingProducer(); - final QueryOptions queryOptions = executionContext.getQueryOptions(); + final var queryOptions = executionContext.getQueryOptions(); final boolean cacheable = queryCacheEnabled && canBeCached @@ -418,10 +410,9 @@ private static AbstractJdbcValues resolveJdbcValues( private static CacheMode resolveCacheMode(ExecutionContext executionContext) { final var queryOptions = executionContext.getQueryOptions(); - final var session = executionContext.getSession(); return coalesceSuppliedValues( () -> queryOptions == null ? null : queryOptions.getCacheMode(), - session::getCacheMode, + executionContext.getSession()::getCacheMode, () -> CacheMode.NORMAL ); } @@ -491,7 +482,7 @@ public BasicType resolveType( if ( columnNames == null ) { initializeArrays(); } - final BasicType basicType = + final var basicType = resultSetAccess.resolveType( position, explicitJavaType, typeConfiguration ); types[position - 1] = basicType; return basicType; diff --git a/hibernate-core/src/test/java/org/hibernate/orm/test/querycache/QueryEngineImplConfigValidationTest.java b/hibernate-core/src/test/java/org/hibernate/orm/test/querycache/QueryEngineImplConfigValidationTest.java index a2c93f538bf2..312d0ad44fdf 100644 --- a/hibernate-core/src/test/java/org/hibernate/orm/test/querycache/QueryEngineImplConfigValidationTest.java +++ b/hibernate-core/src/test/java/org/hibernate/orm/test/querycache/QueryEngineImplConfigValidationTest.java @@ -5,7 +5,7 @@ package org.hibernate.orm.test.querycache; import org.hibernate.boot.registry.StandardServiceRegistry; -import org.hibernate.cfg.AvailableSettings; +import org.hibernate.cfg.QuerySettings; import org.hibernate.internal.util.config.ConfigurationException; import org.hibernate.query.internal.QueryInterpretationCacheDisabledImpl; import org.hibernate.query.internal.QueryInterpretationCacheStandardImpl; @@ -34,8 +34,8 @@ public class QueryEngineImplConfigValidationTest { @Test public void testCacheEnabledWithValidMaxSize() { Map settings = new HashMap<>(); - settings.put( AvailableSettings.QUERY_PLAN_CACHE_ENABLED, true ); - settings.put( AvailableSettings.QUERY_PLAN_CACHE_MAX_SIZE, 100 ); + settings.put( QuerySettings.QUERY_PLAN_CACHE_ENABLED, true ); + settings.put( QuerySettings.QUERY_PLAN_CACHE_MAX_SIZE, 100 ); try (ServiceRegistry serviceRegistry = newRegistry()) { QueryInterpretationCache interpretationCache = assertDoesNotThrow( () -> QueryEngineImpl.buildInterpretationCache( serviceRegistry, settings ) @@ -47,7 +47,7 @@ public void testCacheEnabledWithValidMaxSize() { @Test public void testCacheEnabledWithDefaultMaxSize() { Map settings = new HashMap<>(); - settings.put( AvailableSettings.QUERY_PLAN_CACHE_ENABLED, true ); + settings.put( QuerySettings.QUERY_PLAN_CACHE_ENABLED, true ); // No explicit max size - should use default try (ServiceRegistry serviceRegistry = newRegistry()) { QueryInterpretationCache interpretationCache = assertDoesNotThrow( () -> @@ -60,7 +60,7 @@ public void testCacheEnabledWithDefaultMaxSize() { @Test public void testCacheDisabledWithNoMaxSize() { Map settings = new HashMap<>(); - settings.put( AvailableSettings.QUERY_PLAN_CACHE_ENABLED, false ); + settings.put( QuerySettings.QUERY_PLAN_CACHE_ENABLED, false ); // No explicit max size - should work fine try (ServiceRegistry serviceRegistry = newRegistry()) { QueryInterpretationCache interpretationCache = assertDoesNotThrow( () -> @@ -73,23 +73,23 @@ public void testCacheDisabledWithNoMaxSize() { @Test public void testCacheDisabledWithPositiveMaxSize() { Map settings = new HashMap<>(); - settings.put( AvailableSettings.QUERY_PLAN_CACHE_ENABLED, false ); - settings.put( AvailableSettings.QUERY_PLAN_CACHE_MAX_SIZE, 100 ); + settings.put( QuerySettings.QUERY_PLAN_CACHE_ENABLED, false ); + settings.put( QuerySettings.QUERY_PLAN_CACHE_MAX_SIZE, 100 ); //Explicit max size, with cache explicitly disabled is an inconsistency we want to flag try (ServiceRegistry serviceRegistry = newRegistry()) { ConfigurationException exception = assertThrows( ConfigurationException.class, () -> QueryEngineImpl.buildInterpretationCache( serviceRegistry, settings ) ); assertTrue( exception.getMessage().matches( - "Inconsistent configuration: '" + AvailableSettings.QUERY_PLAN_CACHE_MAX_SIZE + "' can only be set to a greater than zero value when '" + AvailableSettings.QUERY_PLAN_CACHE_ENABLED + "' is enabled" ) ); + "Inconsistent configuration: '" + QuerySettings.QUERY_PLAN_CACHE_MAX_SIZE + "' can only be set to a value greater than zero when '" + QuerySettings.QUERY_PLAN_CACHE_ENABLED + "' is enabled" ) ); } } @Test public void testCacheDisabledWithZeroMaxSize() { Map settings = new HashMap<>(); - settings.put( AvailableSettings.QUERY_PLAN_CACHE_ENABLED, false ); - settings.put( AvailableSettings.QUERY_PLAN_CACHE_MAX_SIZE, 0 ); + settings.put( QuerySettings.QUERY_PLAN_CACHE_ENABLED, false ); + settings.put( QuerySettings.QUERY_PLAN_CACHE_MAX_SIZE, 0 ); try (ServiceRegistry serviceRegistry = newRegistry()) { QueryInterpretationCache interpretationCache = assertDoesNotThrow( () -> QueryEngineImpl.buildInterpretationCache( serviceRegistry, settings ) @@ -101,8 +101,8 @@ public void testCacheDisabledWithZeroMaxSize() { @Test public void testNegativeMaxSize() { Map settings = new HashMap<>(); - settings.put( AvailableSettings.QUERY_PLAN_CACHE_ENABLED, true ); - settings.put( AvailableSettings.QUERY_PLAN_CACHE_MAX_SIZE, -1 ); + settings.put( QuerySettings.QUERY_PLAN_CACHE_ENABLED, true ); + settings.put( QuerySettings.QUERY_PLAN_CACHE_MAX_SIZE, -1 ); try (ServiceRegistry serviceRegistry = newRegistry()) { ConfigurationException exception = assertThrows( ConfigurationException.class, () -> QueryEngineImpl.buildInterpretationCache( serviceRegistry, settings )