Skip to content

Commit c786ffb

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

File tree

7 files changed

+24
-21
lines changed

7 files changed

+24
-21
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: 5 additions & 5 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();
52-
this.valueConverter = new AttributeConverterBean<>(
49+
final JavaType<?> relationalType =
50+
underlyingMapping.getJdbcMapping()
51+
.getJavaTypeDescriptor();
52+
this.valueConverter = new JpaAttributeConverterImpl<>(
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: 9 additions & 4 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

@@ -80,14 +81,18 @@ public boolean isCompatibleWith(JdbcParameterBindings jdbcParameterBindings, Que
8081
for ( var entry : appliedParameters.entrySet() ) {
8182
final JdbcParameterBinding binding = jdbcParameterBindings.getBinding( entry.getKey() );
8283
final JdbcParameterBinding appliedBinding = entry.getValue();
83-
//noinspection unchecked
84-
if ( binding == null || !appliedBinding.getBindType()
85-
.getJavaTypeDescriptor()
86-
.areEqual( binding.getBindValue(), appliedBinding.getBindValue() ) ) {
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: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,8 @@ public BasicResult(
5454
this(
5555
jdbcValuesArrayPosition,
5656
resultVariable,
57-
jdbcMapping.getJavaTypeDescriptor(),
57+
(JavaType<T>)
58+
jdbcMapping.getJavaTypeDescriptor(),
5859
(BasicValueConverter<T,?>)
5960
jdbcMapping.getValueConverter(),
6061
navigablePath,

0 commit comments

Comments
 (0)