Skip to content

Commit 2bc4a94

Browse files
committed
HHH-19291 Expressions.nullExpresion() in querydsl result in NPE in SqmExpressible with named parameters
# Conflicts: # hibernate-core/src/main/java/org/hibernate/query/spi/AbstractCommonQueryContract.java
1 parent c56d9b3 commit 2bc4a94

File tree

1 file changed

+20
-20
lines changed

1 file changed

+20
-20
lines changed

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

+20-20
Original file line numberDiff line numberDiff line change
@@ -749,22 +749,29 @@ public CommonQueryContract setParameter(String name, Object value) {
749749
}
750750
else {
751751
final QueryParameterBinding<Object> binding = getQueryParameterBindings().getBinding( name );
752-
final QueryParameter<Object> param = binding.getQueryParameter();
753-
if ( param.allowsMultiValuedBinding() ) {
754-
final BindableType<?> hibernateType = param.getHibernateType();
755-
if ( hibernateType == null || isInstance( hibernateType, value ) ) {
756-
if ( value instanceof Collection<?> collection
757-
&& !isRegisteredAsBasicType( value.getClass() ) ) {
758-
return setParameterList( name, collection );
759-
}
760-
}
752+
if ( multipleBinding( binding.getQueryParameter(), value )
753+
&& value instanceof Collection<?> collectionValue
754+
&& !isRegisteredAsBasicType( value.getClass() ) ) {
755+
return setParameterList( name, collectionValue );
761756
}
762757
binding.setBindValue( value, resolveJdbcParameterTypeIfNecessary() );
763758
}
764759

765760
return this;
766761
}
767762

763+
private boolean multipleBinding(QueryParameter<Object> param, Object value){
764+
if ( param.allowsMultiValuedBinding() ) {
765+
final BindableType<?> hibernateType = param.getHibernateType();
766+
if ( hibernateType == null
767+
|| hibernateType instanceof NullSqmExpressible
768+
|| isInstance( hibernateType, value ) ) {
769+
return true;
770+
}
771+
}
772+
return false;
773+
}
774+
768775
private <T> void setTypedParameter(String name, TypedParameterValue<T> typedValue) {
769776
final BindableType<T> type = typedValue.getType();
770777
setParameter( name, typedValue.getValue(), type != null ? type : typedValue.getTypeReference() );
@@ -815,17 +822,10 @@ public CommonQueryContract setParameter(int position, Object value) {
815822
}
816823
else {
817824
final QueryParameterBinding<Object> binding = getQueryParameterBindings().getBinding( position );
818-
final QueryParameter<Object> param = binding.getQueryParameter();
819-
if ( param.allowsMultiValuedBinding() ) {
820-
final BindableType<?> hibernateType = param.getHibernateType();
821-
if ( hibernateType == null
822-
|| hibernateType instanceof NullSqmExpressible
823-
|| isInstance( hibernateType, value ) ) {
824-
if ( value instanceof Collection<?> collection
825-
&& !isRegisteredAsBasicType( value.getClass() ) ) {
826-
return setParameterList( position, collection );
827-
}
828-
}
825+
if ( multipleBinding( binding.getQueryParameter(), value )
826+
&& value instanceof Collection<?> collectionValue
827+
&& !isRegisteredAsBasicType( value.getClass() ) ) {
828+
return setParameterList( position, collectionValue );
829829
}
830830
binding.setBindValue( value, resolveJdbcParameterTypeIfNecessary() );
831831
}

0 commit comments

Comments
 (0)