Skip to content

Commit d3f9a21

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 6f3d06c commit d3f9a21

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
@@ -475,6 +475,7 @@ public abstract class BaseSqmToSqlAstConverter<T extends Statement> extends Base
475475
private final QueryOptions queryOptions;
476476
private final LoadQueryInfluencers loadQueryInfluencers;
477477

478+
private int jdbcParamsBySqmParamParameterId = 0;
478479
private final Map<SqmParameter<?>, List<List<JdbcParameter>>> jdbcParamsBySqmParam = new IdentityHashMap<>();
479480
private final JdbcParameters jdbcParameters = new JdbcParametersImpl();
480481
private final DomainParameterXref domainParameterXref;
@@ -5830,6 +5831,7 @@ protected Expression consumeSqmParameter(
58305831
);
58315832

58325833
this.jdbcParameters.addParameters( jdbcParametersForSqm );
5834+
jdbcParamsBySqmParamParameterId += jdbcParametersForSqm.size();
58335835
this.jdbcParamsBySqmParam
58345836
.computeIfAbsent( sqmParameter, k -> new ArrayList<>( 1 ) )
58355837
.add( jdbcParametersForSqm );
@@ -6200,12 +6202,12 @@ private void resolveSqmParameter(
62006202
BiConsumer<Integer,JdbcParameter> jdbcParameterConsumer) {
62016203
sqmParameterMappingModelTypes.put( expression, valueMapping );
62026204
final List<List<JdbcParameter>> jdbcParams = jdbcParamsBySqmParam.get( expression );
6203-
final int parameterId = jdbcParams == null ? jdbcParamsBySqmParam.size()
6205+
final int parameterId = jdbcParams == null ? jdbcParamsBySqmParamParameterId
62046206
: NullnessUtil.castNonNull( jdbcParams.get( 0 ).get( 0 ).getParameterId() );
62056207
final Bindable bindable = bindable( valueMapping );
62066208
if ( bindable instanceof SelectableMappings selectableMappings ) {
62076209
selectableMappings.forEachSelectable(
6208-
(index, selectableMapping) -> jdbcParameterConsumer.accept( index, new SqlTypedMappingJdbcParameter( selectableMapping, parameterId ) )
6210+
(index, selectableMapping) -> jdbcParameterConsumer.accept( index, new SqlTypedMappingJdbcParameter( selectableMapping, parameterId + index ) )
62096211
);
62106212
}
62116213
else if ( bindable instanceof SelectableMapping selectableMapping ) {
@@ -6221,7 +6223,7 @@ else if ( bindable instanceof SelectableMapping selectableMapping ) {
62216223
bindable.forEachJdbcType(
62226224
(index, jdbcMapping) -> jdbcParameterConsumer.accept(
62236225
index,
6224-
new JdbcParameterImpl( jdbcMapping, parameterId )
6226+
new JdbcParameterImpl( jdbcMapping, parameterId + index )
62256227
)
62266228
);
62276229
}

0 commit comments

Comments
 (0)