Skip to content

Commit 8870ab8

Browse files
quaffbeikov
authored andcommitted
HHH-18575 Fix IllegalStateException while passing multi-valued BigDecimal as parameter
Fix ``` java.lang.IllegalStateException: Binding is multi-valued; illegal call to #getBindValue at org.hibernate.query.internal.QueryParameterBindingImpl.getBindValue(QueryParameterBindingImpl.java:100) at org.hibernate.query.sqm.sql.BaseSqmToSqlAstConverter.resolveSqmParameter(BaseSqmToSqlAstConverter.java:6283) at org.hibernate.query.sqm.sql.BaseSqmToSqlAstConverter.consumeSqmParameter(BaseSqmToSqlAstConverter.java:5861) at org.hibernate.query.sqm.sql.BaseSqmToSqlAstConverter.consumeSingleSqmParameter(BaseSqmToSqlAstConverter.java:5950) at org.hibernate.query.sqm.sql.BaseSqmToSqlAstConverter.processInSingleParameter(BaseSqmToSqlAstConverter.java:8178) at org.hibernate.query.sqm.sql.BaseSqmToSqlAstConverter.processInSingleHqlParameter(BaseSqmToSqlAstConverter.java:8135) at org.hibernate.query.sqm.sql.BaseSqmToSqlAstConverter.processInListWithSingleParameter(BaseSqmToSqlAstConverter.java:8124) ```
1 parent e3a36d7 commit 8870ab8

File tree

1 file changed

+8
-1
lines changed

1 file changed

+8
-1
lines changed

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

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6297,7 +6297,14 @@ else if ( bindable instanceof SelectableMapping ) {
62976297
final QueryParameterBinding<?> binding = domainParameterBindings.getBinding(
62986298
domainParameterXref.getQueryParameter( expression )
62996299
);
6300-
final Object bindValue = binding.getBindValue();
6300+
final Object bindValue;
6301+
if ( binding.isMultiValued() ) {
6302+
final Collection<?> bindValues = binding.getBindValues();
6303+
bindValue = !bindValues.isEmpty() ? bindValues.iterator().next() : null;
6304+
}
6305+
else {
6306+
bindValue = binding.getBindValue();
6307+
}
63016308
if ( bindValue != null ) {
63026309
if ( bindValue instanceof BigInteger ) {
63036310
int precision = bindValue.toString().length() - ( ( (BigInteger) bindValue ).signum() < 0 ? 1 : 0 );

0 commit comments

Comments
 (0)