Skip to content

Commit 906c359

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 345191b commit 906c359

File tree

1 file changed

+4
-2
lines changed

1 file changed

+4
-2
lines changed

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

Lines changed: 4 additions & 2 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 ) {

0 commit comments

Comments
 (0)