Skip to content

Commit 1d46b87

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 1951c0b commit 1d46b87

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
@@ -6293,7 +6293,14 @@ else if ( bindable instanceof SelectableMapping ) {
62936293
final QueryParameterBinding<?> binding = domainParameterBindings.getBinding(
62946294
domainParameterXref.getQueryParameter( expression )
62956295
);
6296-
final Object bindValue = binding.getBindValue();
6296+
final Object bindValue;
6297+
if ( binding.isMultiValued() ) {
6298+
final Collection<?> bindValues = binding.getBindValues();
6299+
bindValue = !bindValues.isEmpty() ? bindValues.iterator().next() : null;
6300+
}
6301+
else {
6302+
bindValue = binding.getBindValue();
6303+
}
62976304
if ( bindValue != null ) {
62986305
if ( bindValue instanceof BigInteger ) {
62996306
int precision = bindValue.toString().length() - ( ( (BigInteger) bindValue ).signum() < 0 ? 1 : 0 );

0 commit comments

Comments
 (0)