From 3232d983d372ddbca17175e5e2f02550f5eb61c5 Mon Sep 17 00:00:00 2001 From: Gavin King Date: Fri, 30 May 2025 17:19:32 +0200 Subject: [PATCH] don't use a raw type in JdbcMapping --- .../org/hibernate/internal/SessionFactoryImpl.java | 4 ++-- .../hibernate/metamodel/mapping/JdbcMapping.java | 2 +- .../CompleteResultBuilderBasicValuedConverted.java | 10 +++++----- .../sql/ast/tree/expression/JdbcLiteral.java | 5 +++-- .../sql/exec/spi/AbstractJdbcOperationQuery.java | 13 +++++++++---- .../sql/exec/spi/JdbcOperationQuerySelect.java | 9 ++------- .../sql/results/graph/basic/BasicResult.java | 3 ++- 7 files changed, 24 insertions(+), 22 deletions(-) diff --git a/hibernate-core/src/main/java/org/hibernate/internal/SessionFactoryImpl.java b/hibernate-core/src/main/java/org/hibernate/internal/SessionFactoryImpl.java index 7a878f70e61a..ee4e652b2856 100644 --- a/hibernate-core/src/main/java/org/hibernate/internal/SessionFactoryImpl.java +++ b/hibernate-core/src/main/java/org/hibernate/internal/SessionFactoryImpl.java @@ -268,9 +268,9 @@ public SessionFactoryImpl( final JdbcMapping jdbcMapping = tenantFilter.getParameterJdbcMapping( TenantIdBinder.PARAMETER_NAME ); assert jdbcMapping != null; //noinspection unchecked - tenantIdentifierJavaType = jdbcMapping.getJavaTypeDescriptor(); + tenantIdentifierJavaType = (JavaType) jdbcMapping.getJavaTypeDescriptor(); } - for ( Map.Entry filterEntry : filters.entrySet() ) { + for ( var filterEntry : filters.entrySet() ) { if ( filterEntry.getValue().isAutoEnabled() ) { autoEnabledFilters.add( filterEntry.getValue() ); } diff --git a/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/JdbcMapping.java b/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/JdbcMapping.java index 77d2720a812f..c05ddd5d560d 100644 --- a/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/JdbcMapping.java +++ b/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/JdbcMapping.java @@ -54,7 +54,7 @@ public interface JdbcMapping extends MappingType, JdbcMappingContainer { * The descriptor for the Java type represented by this * expressible type */ - JavaType getJavaTypeDescriptor(); + JavaType getJavaTypeDescriptor(); /** * The descriptor for the SQL type represented by this diff --git a/hibernate-core/src/main/java/org/hibernate/query/results/internal/complete/CompleteResultBuilderBasicValuedConverted.java b/hibernate-core/src/main/java/org/hibernate/query/results/internal/complete/CompleteResultBuilderBasicValuedConverted.java index dcde5a9c6c8e..3e42757baf35 100644 --- a/hibernate-core/src/main/java/org/hibernate/query/results/internal/complete/CompleteResultBuilderBasicValuedConverted.java +++ b/hibernate-core/src/main/java/org/hibernate/query/results/internal/complete/CompleteResultBuilderBasicValuedConverted.java @@ -46,14 +46,14 @@ public CompleteResultBuilderBasicValuedConverted( BasicValuedMapping underlyingMapping) { this.explicitColumnName = explicitColumnName; this.underlyingMapping = underlyingMapping; - @SuppressWarnings("unchecked") - final JavaType relationalType = - underlyingMapping.getJdbcMapping().getJavaTypeDescriptor(); - this.valueConverter = new AttributeConverterBean<>( + final JavaType relationalType = + underlyingMapping.getJdbcMapping() + .getJavaTypeDescriptor(); + this.valueConverter = new JpaAttributeConverterImpl<>( converterBean, converterJtd, domainJavaType, - relationalType + (JavaType) relationalType ); } diff --git a/hibernate-core/src/main/java/org/hibernate/sql/ast/tree/expression/JdbcLiteral.java b/hibernate-core/src/main/java/org/hibernate/sql/ast/tree/expression/JdbcLiteral.java index c5a7295d57a2..34ede813722d 100644 --- a/hibernate-core/src/main/java/org/hibernate/sql/ast/tree/expression/JdbcLiteral.java +++ b/hibernate-core/src/main/java/org/hibernate/sql/ast/tree/expression/JdbcLiteral.java @@ -78,7 +78,7 @@ public void bindParameterValue( // MappingModelExpressible @Override - public MappingModelExpressible getExpressionType() { + public MappingModelExpressible getExpressionType() { return this; } @@ -184,6 +184,7 @@ public void applySqlSelections(DomainResultCreationState creationState) { @Override public JavaType getExpressibleJavaType() { - return jdbcMapping.getJavaTypeDescriptor(); + return (JavaType) + jdbcMapping.getJavaTypeDescriptor(); } } diff --git a/hibernate-core/src/main/java/org/hibernate/sql/exec/spi/AbstractJdbcOperationQuery.java b/hibernate-core/src/main/java/org/hibernate/sql/exec/spi/AbstractJdbcOperationQuery.java index 56803a6f63db..dc969f08f53a 100644 --- a/hibernate-core/src/main/java/org/hibernate/sql/exec/spi/AbstractJdbcOperationQuery.java +++ b/hibernate-core/src/main/java/org/hibernate/sql/exec/spi/AbstractJdbcOperationQuery.java @@ -10,6 +10,7 @@ import org.hibernate.query.spi.QueryOptions; import org.hibernate.sql.ast.tree.expression.JdbcParameter; +import org.hibernate.type.descriptor.java.JavaType; import static java.util.Collections.emptyMap; @@ -76,14 +77,18 @@ public boolean isCompatibleWith(JdbcParameterBindings jdbcParameterBindings, Que for ( var entry : appliedParameters.entrySet() ) { final JdbcParameterBinding binding = jdbcParameterBindings.getBinding( entry.getKey() ); final JdbcParameterBinding appliedBinding = entry.getValue(); - //noinspection unchecked - if ( binding == null || !appliedBinding.getBindType() - .getJavaTypeDescriptor() - .areEqual( binding.getBindValue(), appliedBinding.getBindValue() ) ) { + if ( binding == null + || !equal( appliedBinding, binding, appliedBinding.getBindType().getJavaTypeDescriptor() ) ) { return false; } } } return true; } + + @SuppressWarnings("unchecked") + static boolean equal(JdbcParameterBinding appliedBinding, JdbcParameterBinding binding, JavaType type) { + return type.isInstance( appliedBinding.getBindValue() ) + && type.areEqual( (T) binding.getBindValue(), (T) appliedBinding.getBindValue() ); + } } diff --git a/hibernate-core/src/main/java/org/hibernate/sql/exec/spi/JdbcOperationQuerySelect.java b/hibernate-core/src/main/java/org/hibernate/sql/exec/spi/JdbcOperationQuerySelect.java index c9a2e63bad68..69a5650bb9c7 100644 --- a/hibernate-core/src/main/java/org/hibernate/sql/exec/spi/JdbcOperationQuerySelect.java +++ b/hibernate-core/src/main/java/org/hibernate/sql/exec/spi/JdbcOperationQuerySelect.java @@ -13,7 +13,6 @@ import org.hibernate.query.spi.QueryOptions; import org.hibernate.sql.ast.tree.expression.JdbcParameter; import org.hibernate.sql.results.jdbc.spi.JdbcValuesMappingProducer; -import org.hibernate.type.descriptor.java.JavaType; /** * Executable JDBC command @@ -128,7 +127,8 @@ else if ( jdbcParameterBindings.getBinding( parameter ) == null ) { if ( parameter != offsetParameter && parameter != limitParameter ) { final JdbcParameterBinding binding = jdbcParameterBindings.getBinding( parameter ); // TODO: appliedBinding can be null here, resulting in NPE - if ( binding == null || !areEqualBindings( appliedBinding, binding ) ) { + if ( binding == null + || !equal( appliedBinding, binding, appliedBinding.getBindType().getJavaTypeDescriptor() ) ) { return false; } } @@ -140,11 +140,6 @@ && isCompatible( offsetParameter, limit == null ? null : limit.getFirstRow(), 0 && isCompatible( limitParameter, limit == null ? null : limit.getMaxRows(), Integer.MAX_VALUE ); } - private static boolean areEqualBindings(JdbcParameterBinding appliedBinding, JdbcParameterBinding binding) { - final JavaType javaTypeDescriptor = appliedBinding.getBindType().getJavaTypeDescriptor(); - return javaTypeDescriptor.areEqual( binding.getBindValue(), appliedBinding.getBindValue() ); - } - private boolean isCompatible(JdbcParameter parameter, Integer requestedValue, int defaultValue) { if ( parameter == null ) { return requestedValue == null; diff --git a/hibernate-core/src/main/java/org/hibernate/sql/results/graph/basic/BasicResult.java b/hibernate-core/src/main/java/org/hibernate/sql/results/graph/basic/BasicResult.java index 1bba9ceb8ed1..d5cd891b07c2 100644 --- a/hibernate-core/src/main/java/org/hibernate/sql/results/graph/basic/BasicResult.java +++ b/hibernate-core/src/main/java/org/hibernate/sql/results/graph/basic/BasicResult.java @@ -54,7 +54,8 @@ public BasicResult( this( jdbcValuesArrayPosition, resultVariable, - jdbcMapping.getJavaTypeDescriptor(), + (JavaType) + jdbcMapping.getJavaTypeDescriptor(), (BasicValueConverter) jdbcMapping.getValueConverter(), navigablePath,