Skip to content

Commit 9699155

Browse files
committed
HHH-19291 Expressions.nullExpresion() in querydsl result in NPE in SqmExpressible with named parameters
1 parent 38c9998 commit 9699155

File tree

1 file changed

+17
-18
lines changed

1 file changed

+17
-18
lines changed

hibernate-core/src/main/java/org/hibernate/query/spi/AbstractCommonQueryContract.java

+17-18
Original file line numberDiff line numberDiff line change
@@ -753,22 +753,26 @@ public CommonQueryContract setParameter(String name, Object value) {
753753
}
754754

755755
final QueryParameterBinding<Object> binding = getQueryParameterBindings().getBinding( name );
756-
final QueryParameter<Object> param = binding.getQueryParameter();
757-
if ( param.allowsMultiValuedBinding() ) {
758-
final BindableType<?> hibernateType = param.getHibernateType();
759-
if ( hibernateType == null || isInstance( hibernateType, value ) ) {
760-
if ( value instanceof Collection && !isRegisteredAsBasicType( value.getClass() ) ) {
761-
//noinspection rawtypes
762-
return setParameterList( name, (Collection) value );
763-
}
764-
}
756+
if ( multipleBinding( binding.getQueryParameter(), value )
757+
&& value instanceof Collection<?> collectionValue
758+
&& !isRegisteredAsBasicType( value.getClass() ) ) {
759+
return setParameterList( name, collectionValue );
765760
}
766761

767762
binding.setBindValue( value, resolveJdbcParameterTypeIfNecessary() );
768763

769764
return this;
770765
}
771766

767+
private boolean multipleBinding(QueryParameter<Object> param, Object value){
768+
if ( param.allowsMultiValuedBinding() ) {
769+
final BindableType<?> hibernateType = param.getHibernateType();
770+
if ( hibernateType == null || hibernateType instanceof NullSqmExpressible || isInstance( hibernateType, value ) ) {
771+
return true;
772+
}
773+
}
774+
return false;
775+
}
772776

773777
private boolean isInstance(BindableType<?> parameterType, Object value) {
774778
final SqmExpressible<?> sqmExpressible =
@@ -842,15 +846,10 @@ public CommonQueryContract setParameter(int position, Object value) {
842846
}
843847

844848
final QueryParameterBinding<Object> binding = getQueryParameterBindings().getBinding( position );
845-
final QueryParameter<Object> param = binding.getQueryParameter();
846-
if ( param.allowsMultiValuedBinding() ) {
847-
final BindableType<?> hibernateType = param.getHibernateType();
848-
if ( hibernateType == null || hibernateType instanceof NullSqmExpressible || isInstance( hibernateType, value ) ) {
849-
if ( value instanceof Collection && !isRegisteredAsBasicType( value.getClass() ) ) {
850-
//noinspection rawtypes
851-
return setParameterList( position, (Collection) value );
852-
}
853-
}
849+
if ( multipleBinding( binding.getQueryParameter(), value )
850+
&& value instanceof Collection<?> collectionValue
851+
&& !isRegisteredAsBasicType( value.getClass() ) ) {
852+
return setParameterList( position, collectionValue );
854853
}
855854

856855
binding.setBindValue( value, resolveJdbcParameterTypeIfNecessary() );

0 commit comments

Comments
 (0)