Skip to content

Commit 0f41601

Browse files
committed
don't use a raw type in JdbcMapping
1 parent 36a6bdb commit 0f41601

File tree

7 files changed

+37
-31
lines changed

7 files changed

+37
-31
lines changed

hibernate-core/src/main/java/org/hibernate/internal/SessionFactoryImpl.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -344,8 +344,9 @@ private JavaType<Object> tenantIdentifierType(SessionFactoryOptions options) {
344344
else {
345345
final var jdbcMapping = tenantFilter.getParameterJdbcMapping( TenantIdBinder.PARAMETER_NAME );
346346
assert jdbcMapping != null;
347+
//NOTE: this is completely unsound
347348
//noinspection unchecked
348-
return jdbcMapping.getJavaTypeDescriptor();
349+
return (JavaType<Object>) jdbcMapping.getJavaTypeDescriptor();
349350
}
350351
}
351352

hibernate-core/src/main/java/org/hibernate/metamodel/mapping/JdbcMapping.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ public interface JdbcMapping extends MappingType, JdbcMappingContainer {
5454
* The descriptor for the Java type represented by this
5555
* expressible type
5656
*/
57-
JavaType getJavaTypeDescriptor();
57+
JavaType<?> getJavaTypeDescriptor();
5858

5959
/**
6060
* The descriptor for the SQL type represented by this

hibernate-core/src/main/java/org/hibernate/query/results/internal/complete/CompleteResultBuilderBasicValuedConverted.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -46,14 +46,14 @@ public CompleteResultBuilderBasicValuedConverted(
4646
BasicValuedMapping underlyingMapping) {
4747
this.explicitColumnName = explicitColumnName;
4848
this.underlyingMapping = underlyingMapping;
49-
@SuppressWarnings("unchecked")
50-
final JavaType<R> relationalType =
51-
underlyingMapping.getJdbcMapping().getJavaTypeDescriptor();
49+
final JavaType<?> relationalType =
50+
underlyingMapping.getJdbcMapping()
51+
.getJavaTypeDescriptor();
5252
this.valueConverter = new AttributeConverterBean<>(
5353
converterBean,
5454
converterJtd,
5555
domainJavaType,
56-
relationalType
56+
(JavaType<R>) relationalType
5757
);
5858
}
5959

hibernate-core/src/main/java/org/hibernate/sql/ast/tree/expression/JdbcLiteral.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ public void bindParameterValue(
7878
// MappingModelExpressible
7979

8080
@Override
81-
public MappingModelExpressible<?> getExpressionType() {
81+
public MappingModelExpressible<T> getExpressionType() {
8282
return this;
8383
}
8484

@@ -184,6 +184,7 @@ public void applySqlSelections(DomainResultCreationState creationState) {
184184

185185
@Override
186186
public JavaType<T> getExpressibleJavaType() {
187-
return jdbcMapping.getJavaTypeDescriptor();
187+
return (JavaType<T>)
188+
jdbcMapping.getJavaTypeDescriptor();
188189
}
189190
}

hibernate-core/src/main/java/org/hibernate/sql/exec/internal/AbstractJdbcOperationQuery.java

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import org.hibernate.sql.exec.spi.JdbcParameterBinder;
1515
import org.hibernate.sql.exec.spi.JdbcParameterBinding;
1616
import org.hibernate.sql.exec.spi.JdbcParameterBindings;
17+
import org.hibernate.type.descriptor.java.JavaType;
1718

1819
import static java.util.Collections.emptyMap;
1920

@@ -78,16 +79,20 @@ public boolean isCompatibleWith(JdbcParameterBindings jdbcParameterBindings, Que
7879
return false;
7980
}
8081
for ( var entry : appliedParameters.entrySet() ) {
81-
final JdbcParameterBinding binding = jdbcParameterBindings.getBinding( entry.getKey() );
82-
final JdbcParameterBinding appliedBinding = entry.getValue();
83-
//noinspection unchecked
84-
if ( binding == null || !appliedBinding.getBindType()
85-
.getJavaTypeDescriptor()
86-
.areEqual( binding.getBindValue(), appliedBinding.getBindValue() ) ) {
82+
final var binding = jdbcParameterBindings.getBinding( entry.getKey() );
83+
final var appliedBinding = entry.getValue();
84+
if ( binding == null
85+
|| !equal( appliedBinding, binding, appliedBinding.getBindType().getJavaTypeDescriptor() ) ) {
8786
return false;
8887
}
8988
}
9089
}
9190
return true;
9291
}
92+
93+
@SuppressWarnings("unchecked")
94+
static <T> boolean equal(JdbcParameterBinding appliedBinding, JdbcParameterBinding binding, JavaType<T> type) {
95+
return type.isInstance( appliedBinding.getBindValue() )
96+
&& type.areEqual( (T) binding.getBindValue(), (T) appliedBinding.getBindValue() );
97+
}
9398
}

hibernate-core/src/main/java/org/hibernate/sql/exec/internal/JdbcOperationQuerySelect.java

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
import org.hibernate.sql.exec.spi.JdbcSelect;
1818
import org.hibernate.sql.exec.spi.LoadedValuesCollector;
1919
import org.hibernate.sql.results.jdbc.spi.JdbcValuesMappingProducer;
20-
import org.hibernate.type.descriptor.java.JavaType;
2120

2221
import java.sql.Connection;
2322
import java.util.Collections;
@@ -159,7 +158,8 @@ else if ( jdbcParameterBindings.getBinding( parameter ) == null ) {
159158
if ( parameter != offsetParameter && parameter != limitParameter ) {
160159
final JdbcParameterBinding binding = jdbcParameterBindings.getBinding( parameter );
161160
// TODO: appliedBinding can be null here, resulting in NPE
162-
if ( binding == null || !areEqualBindings( appliedBinding, binding ) ) {
161+
if ( binding == null
162+
|| !equal( appliedBinding, binding, appliedBinding.getBindType().getJavaTypeDescriptor() ) ) {
163163
return false;
164164
}
165165
}
@@ -171,11 +171,6 @@ && isCompatible( offsetParameter, limit == null ? null : limit.getFirstRow(), 0
171171
&& isCompatible( limitParameter, limit == null ? null : limit.getMaxRows(), Integer.MAX_VALUE );
172172
}
173173

174-
private static boolean areEqualBindings(JdbcParameterBinding appliedBinding, JdbcParameterBinding binding) {
175-
final JavaType<Object> javaTypeDescriptor = appliedBinding.getBindType().getJavaTypeDescriptor();
176-
return javaTypeDescriptor.areEqual( binding.getBindValue(), appliedBinding.getBindValue() );
177-
}
178-
179174
private boolean isCompatible(JdbcParameter parameter, Integer requestedValue, int defaultValue) {
180175
if ( parameter == null ) {
181176
return requestedValue == null;

hibernate-core/src/main/java/org/hibernate/sql/results/graph/basic/BasicResult.java

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -54,9 +54,8 @@ public BasicResult(
5454
this(
5555
jdbcValuesArrayPosition,
5656
resultVariable,
57-
jdbcMapping.getJavaTypeDescriptor(),
58-
(BasicValueConverter<T,?>)
59-
jdbcMapping.getValueConverter(),
57+
(JavaType<T>) jdbcMapping.getJavaTypeDescriptor(),
58+
(BasicValueConverter<T,?>) jdbcMapping.getValueConverter(),
6059
navigablePath,
6160
coerceResultType,
6261
unwrapRowProcessingState
@@ -67,20 +66,25 @@ public BasicResult(
6766
int valuesArrayPosition,
6867
String resultVariable,
6968
JavaType<T> javaType,
70-
BasicValueConverter<T,?> valueConverter,
69+
BasicValueConverter<T,?> converter,
7170
NavigablePath navigablePath,
7271
boolean coerceResultType,
7372
boolean unwrapRowProcessingState) {
7473
this.resultVariable = resultVariable;
7574
this.javaType = javaType;
7675
this.navigablePath = navigablePath;
76+
this.assembler = assembler( valuesArrayPosition, javaType, converter, coerceResultType, unwrapRowProcessingState );
77+
}
7778

78-
if ( coerceResultType ) {
79-
this.assembler = new CoercingResultAssembler<>( valuesArrayPosition, javaType, valueConverter, unwrapRowProcessingState );
80-
}
81-
else {
82-
this.assembler = new BasicResultAssembler<>( valuesArrayPosition, javaType, valueConverter, unwrapRowProcessingState );
83-
}
79+
private static <T> BasicResultAssembler<T> assembler(
80+
int valuesArrayPosition,
81+
JavaType<T> javaType,
82+
BasicValueConverter<T, ?> converter,
83+
boolean coerceResultType,
84+
boolean unwrapRowProcessingState) {
85+
return coerceResultType
86+
? new CoercingResultAssembler<>( valuesArrayPosition, javaType, converter, unwrapRowProcessingState )
87+
: new BasicResultAssembler<>( valuesArrayPosition, javaType, converter, unwrapRowProcessingState );
8488
}
8589

8690
@Override

0 commit comments

Comments
 (0)