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 extends T> values) {
this.bindValue = null;
this.bindValues = values;
- final Iterator extends T> 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 super T>) 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 extends AttributeConverter, ?>>) 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 extends UserType> -> @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 )