Skip to content

Commit eb5b9c5

Browse files
committed
don't use a raw type in JdbcMapping
1 parent 72687f4 commit eb5b9c5

File tree

9 files changed

+70
-60
lines changed

9 files changed

+70
-60
lines changed

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -268,9 +268,9 @@ public SessionFactoryImpl(
268268
final JdbcMapping jdbcMapping = tenantFilter.getParameterJdbcMapping( TenantIdBinder.PARAMETER_NAME );
269269
assert jdbcMapping != null;
270270
//noinspection unchecked
271-
tenantIdentifierJavaType = jdbcMapping.getJavaTypeDescriptor();
271+
tenantIdentifierJavaType = (JavaType<Object>) jdbcMapping.getJavaTypeDescriptor();
272272
}
273-
for ( Map.Entry<String, FilterDefinition> filterEntry : filters.entrySet() ) {
273+
for ( var filterEntry : filters.entrySet() ) {
274274
if ( filterEntry.getValue().isAutoEnabled() ) {
275275
autoEnabledFilters.add( filterEntry.getValue() );
276276
}

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/metamodel/mapping/internal/SoftDeleteMappingImpl.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -124,9 +124,12 @@ public SoftDeleteMappingImpl(
124124
}
125125
else {
126126
//noinspection unchecked
127-
final BasicValueConverter<Boolean, Object> converter = (BasicValueConverter<Boolean, Object>) resolution.getValueConverter();
127+
final BasicValueConverter<Boolean, ?> converter =
128+
(BasicValueConverter<Boolean, ?>)
129+
resolution.getValueConverter();
128130
//noinspection unchecked
129-
final JdbcLiteralFormatter<Object> literalFormatter = resolution.getJdbcMapping().getJdbcLiteralFormatter();
131+
final JdbcLiteralFormatter<Object> literalFormatter =
132+
resolution.getJdbcMapping().getJdbcLiteralFormatter();
130133

131134
if ( converter == null ) {
132135
// the database column is BIT or BOOLEAN : pass-thru

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: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ public void bindParameterValue(
7979
// MappingModelExpressible
8080

8181
@Override
82-
public MappingModelExpressible getExpressionType() {
82+
public MappingModelExpressible<T> getExpressionType() {
8383
return this;
8484
}
8585

@@ -114,14 +114,20 @@ public Object disassemble(Object value, SharedSessionContractImplementor session
114114

115115
@Override
116116
public void addToCacheKey(MutableCacheKeyBuilder cacheKey, Object value, SharedSessionContractImplementor session) {
117-
if ( value == null ) {
118-
return;
117+
if ( value != null ) {
118+
cacheKey.addValue( disassemble( value, jdbcMapping.getJdbcJavaType().getMutabilityPlan(), session ) );
119+
cacheKey.addHashCode( hashCode( value, jdbcMapping.getJavaTypeDescriptor() ) );
119120
}
120-
final Serializable disassemble = ( (MutabilityPlan<Object>) jdbcMapping.getJdbcJavaType().getMutabilityPlan() )
121-
.disassemble( value, session );
122-
final int hashCode = jdbcMapping.getJavaTypeDescriptor().extractHashCode( value );
123-
cacheKey.addValue( disassemble );
124-
cacheKey.addHashCode( hashCode );
121+
}
122+
123+
private static <T> int hashCode(Object value, JavaType<T> javaTypeDescriptor) {
124+
return javaTypeDescriptor.extractHashCode( (T) value );
125+
}
126+
127+
private static <T> Serializable disassemble(
128+
Object value, MutabilityPlan<T> mutabilityPlan,
129+
SharedSessionContractImplementor session) {
130+
return mutabilityPlan.disassemble( (T) value, session );
125131
}
126132

127133
@Override
@@ -182,6 +188,7 @@ public void applySqlSelections(DomainResultCreationState creationState) {
182188

183189
@Override
184190
public JavaType<T> getExpressibleJavaType() {
185-
return jdbcMapping.getJavaTypeDescriptor();
191+
return (JavaType<T>)
192+
jdbcMapping.getJavaTypeDescriptor();
186193
}
187194
}

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

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
import org.hibernate.query.spi.QueryOptions;
1313
import org.hibernate.sql.ast.tree.expression.JdbcParameter;
14+
import org.hibernate.type.descriptor.java.JavaType;
1415

1516
/**
1617
* Executable JDBC command
@@ -77,17 +78,21 @@ public boolean isCompatibleWith(JdbcParameterBindings jdbcParameterBindings, Que
7778
if ( jdbcParameterBindings == null ) {
7879
return false;
7980
}
80-
for ( Map.Entry<JdbcParameter, JdbcParameterBinding> entry : appliedParameters.entrySet() ) {
81+
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/spi/JdbcOperationQuerySelect.java

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
import org.hibernate.query.spi.QueryOptions;
1414
import org.hibernate.sql.ast.tree.expression.JdbcParameter;
1515
import org.hibernate.sql.results.jdbc.spi.JdbcValuesMappingProducer;
16-
import org.hibernate.type.descriptor.java.JavaType;
1716

1817
/**
1918
* Executable JDBC command
@@ -101,7 +100,7 @@ public boolean isCompatibleWith(JdbcParameterBindings jdbcParameterBindings, Que
101100
if ( jdbcParameterBindings == null ) {
102101
return false;
103102
}
104-
for ( Map.Entry<JdbcParameter, JdbcParameterBinding> entry : appliedParameters.entrySet() ) {
103+
for ( var entry : appliedParameters.entrySet() ) {
105104
final JdbcParameter parameter = entry.getKey();
106105
final JdbcParameterBinding appliedBinding = entry.getValue();
107106
// This is a special case where the rendered SQL depends on the presence of the parameter,
@@ -128,7 +127,8 @@ else if ( jdbcParameterBindings.getBinding( parameter ) == null ) {
128127
if ( parameter != offsetParameter && parameter != limitParameter ) {
129128
final JdbcParameterBinding binding = jdbcParameterBindings.getBinding( parameter );
130129
// TODO: appliedBinding can be null here, resulting in NPE
131-
if ( binding == null || !areEqualBindings( appliedBinding, binding ) ) {
130+
if ( binding == null
131+
|| !equal( appliedBinding, binding, appliedBinding.getBindType().getJavaTypeDescriptor() ) ) {
132132
return false;
133133
}
134134
}
@@ -140,11 +140,6 @@ && isCompatible( offsetParameter, limit == null ? null : limit.getFirstRow(), 0
140140
&& isCompatible( limitParameter, limit == null ? null : limit.getMaxRows(), Integer.MAX_VALUE );
141141
}
142142

143-
private static boolean areEqualBindings(JdbcParameterBinding appliedBinding, JdbcParameterBinding binding) {
144-
final JavaType<Object> javaTypeDescriptor = appliedBinding.getBindType().getJavaTypeDescriptor();
145-
return javaTypeDescriptor.areEqual( binding.getBindValue(), appliedBinding.getBindValue() );
146-
}
147-
148143
private boolean isCompatible(JdbcParameter parameter, Integer requestedValue, int defaultValue) {
149144
if ( parameter == null ) {
150145
return requestedValue == null;

hibernate-core/src/main/java/org/hibernate/sql/model/jdbc/OptionalTableUpdateOperation.java

Lines changed: 26 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -214,31 +214,29 @@ private void bindKeyValues(
214214
final JdbcValueDescriptor valueDescriptor = jdbcValueDescriptors.get( binding.getPosition() - 1 );
215215

216216
// key bindings would have a usage of RESTRICT relative to the UPDATE
217-
if ( valueDescriptor.getUsage() != ParameterUsage.RESTRICT ) {
218-
continue;
219-
}
220-
221-
while ( keyBindingsItr.hasNext() ) {
222-
final ColumnValueBinding valueBinding = keyBindingsItr.next();
223-
224-
if ( Objects.equals( valueBinding.getColumnReference().getColumnExpression(), binding.getColumnName() ) ) {
225-
// `binding` is for a key column
226-
foundKeyBindings = true;
227-
bindKeyValue(
228-
jdbcBindingPosition++,
229-
binding,
230-
valueDescriptor,
231-
statement,
232-
jdbcDelete.getSqlString(),
233-
tableMapping,
234-
session
235-
);
236-
break;
237-
}
238-
else {
239-
if ( foundKeyBindings ) {
240-
// we are now "beyond" the key bindings
241-
break bindings;
217+
if ( valueDescriptor.getUsage() == ParameterUsage.RESTRICT ) {
218+
while ( keyBindingsItr.hasNext() ) {
219+
final ColumnValueBinding valueBinding = keyBindingsItr.next();
220+
if ( Objects.equals( valueBinding.getColumnReference().getColumnExpression(),
221+
binding.getColumnName() ) ) {
222+
// `binding` is for a key column
223+
foundKeyBindings = true;
224+
bindKeyValue(
225+
jdbcBindingPosition++,
226+
binding,
227+
valueDescriptor,
228+
statement,
229+
jdbcDelete.getSqlString(),
230+
tableMapping,
231+
session
232+
);
233+
break;
234+
}
235+
else {
236+
if ( foundKeyBindings ) {
237+
// we are now "beyond" the key bindings
238+
break bindings;
239+
}
242240
}
243241
}
244242
}
@@ -327,8 +325,9 @@ private boolean performUpdate(
327325

328326
jdbcValueBindings.beforeStatement( statementDetails );
329327

330-
final int rowCount = session.getJdbcCoordinator().getResultSetReturn()
331-
.executeUpdate( updateStatement, statementDetails.getSqlString() );
328+
final int rowCount =
329+
session.getJdbcCoordinator().getResultSetReturn()
330+
.executeUpdate( updateStatement, statementDetails.getSqlString() );
332331

333332
if ( rowCount == 0 ) {
334333
return false;

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)