Skip to content

Commit 206c277

Browse files
committed
HHH-19792 Wrong query generated when an EmbeddedId is used in a WHERE clause using the IN operator and NativeParameterMarkerStrategy
1 parent 5a1b3aa commit 206c277

File tree

1 file changed

+5
-3
lines changed

1 file changed

+5
-3
lines changed

hibernate-core/src/main/java/org/hibernate/query/sqm/sql/BaseSqmToSqlAstConverter.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -473,6 +473,7 @@ public abstract class BaseSqmToSqlAstConverter<T extends Statement> extends Base
473473
private final QueryOptions queryOptions;
474474
private final LoadQueryInfluencers loadQueryInfluencers;
475475

476+
private int jdbcParamsBySqmParamParameterId = 0;
476477
private final Map<SqmParameter<?>, List<List<JdbcParameter>>> jdbcParamsBySqmParam = new IdentityHashMap<>();
477478
private final JdbcParameters jdbcParameters = new JdbcParametersImpl();
478479
private final DomainParameterXref domainParameterXref;
@@ -5829,6 +5830,7 @@ protected Expression consumeSqmParameter(
58295830
);
58305831

58315832
this.jdbcParameters.addParameters( jdbcParametersForSqm );
5833+
jdbcParamsBySqmParamParameterId += jdbcParametersForSqm.size();
58325834
this.jdbcParamsBySqmParam
58335835
.computeIfAbsent( sqmParameter, k -> new ArrayList<>( 1 ) )
58345836
.add( jdbcParametersForSqm );
@@ -6199,12 +6201,12 @@ private void resolveSqmParameter(
61996201
BiConsumer<Integer,JdbcParameter> jdbcParameterConsumer) {
62006202
sqmParameterMappingModelTypes.put( expression, valueMapping );
62016203
final List<List<JdbcParameter>> jdbcParams = jdbcParamsBySqmParam.get( expression );
6202-
final int parameterId = jdbcParams == null ? jdbcParamsBySqmParam.size()
6204+
final int parameterId = jdbcParams == null ? jdbcParamsBySqmParamParameterId
62036205
: NullnessUtil.castNonNull( jdbcParams.get( 0 ).get( 0 ).getParameterId() );
62046206
final Bindable bindable = bindable( valueMapping );
62056207
if ( bindable instanceof SelectableMappings selectableMappings ) {
62066208
selectableMappings.forEachSelectable(
6207-
(index, selectableMapping) -> jdbcParameterConsumer.accept( index, new SqlTypedMappingJdbcParameter( selectableMapping, parameterId ) )
6209+
(index, selectableMapping) -> jdbcParameterConsumer.accept( index, new SqlTypedMappingJdbcParameter( selectableMapping, parameterId + index ) )
62086210
);
62096211
}
62106212
else if ( bindable instanceof SelectableMapping selectableMapping ) {
@@ -6220,7 +6222,7 @@ else if ( bindable instanceof SelectableMapping selectableMapping ) {
62206222
bindable.forEachJdbcType(
62216223
(index, jdbcMapping) -> jdbcParameterConsumer.accept(
62226224
index,
6223-
new JdbcParameterImpl( jdbcMapping, parameterId )
6225+
new JdbcParameterImpl( jdbcMapping, parameterId + index )
62246226
)
62256227
);
62266228
}

0 commit comments

Comments
 (0)