Skip to content

Commit e2e9128

Browse files
committed
HHH-18709 Also apply inferrable types to jpa criteria parameters
1 parent 07b54de commit e2e9128

File tree

3 files changed

+9
-27
lines changed

3 files changed

+9
-27
lines changed

hibernate-core/src/main/java/org/hibernate/query/sqm/internal/QuerySqmImpl.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@
7474
import org.hibernate.query.sqm.tree.expression.JpaCriteriaParameter;
7575
import org.hibernate.query.sqm.tree.expression.SqmJpaCriteriaParameterWrapper;
7676
import org.hibernate.query.sqm.tree.expression.SqmParameter;
77+
import org.hibernate.query.sqm.tree.expression.ValueBindJpaCriteriaParameter;
7778
import org.hibernate.query.sqm.tree.from.SqmRoot;
7879
import org.hibernate.query.sqm.tree.insert.SqmInsertStatement;
7980
import org.hibernate.query.sqm.tree.insert.SqmInsertValuesStatement;
@@ -245,9 +246,8 @@ public QuerySqmImpl(
245246
private <T> void bindCriteriaParameter(SqmJpaCriteriaParameterWrapper<T> sqmParameter) {
246247
final JpaCriteriaParameter<T> jpaCriteriaParameter = sqmParameter.getJpaCriteriaParameter();
247248
final T value = jpaCriteriaParameter.getValue();
248-
// We don't set a null value, unless the type is also null which
249-
// is the case when using HibernateCriteriaBuilder.value
250-
if ( value != null || jpaCriteriaParameter.getNodeType() == null ) {
249+
// We don't set a null value, unless using HibernateCriteriaBuilder.value
250+
if ( value != null || jpaCriteriaParameter instanceof ValueBindJpaCriteriaParameter<?> ) {
251251
// Use the anticipated type for binding the value if possible
252252
getQueryParameterBindings().getBinding( jpaCriteriaParameter )
253253
.setBindValue( value, jpaCriteriaParameter.getAnticipatedType() );

hibernate-core/src/main/java/org/hibernate/query/sqm/tree/expression/AbstractSqmParameter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ public abstract class AbstractSqmParameter<T> extends AbstractSqmExpression<T> i
2121

2222
public AbstractSqmParameter(
2323
boolean canBeMultiValued,
24-
SqmExpressible<T> inherentType,
24+
SqmExpressible<? super T> inherentType,
2525
NodeBuilder nodeBuilder) {
2626
super( inherentType, nodeBuilder );
2727
this.canBeMultiValued = canBeMultiValued;

hibernate-core/src/main/java/org/hibernate/query/sqm/tree/expression/JpaCriteriaParameter.java

Lines changed: 5 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -27,25 +27,22 @@
2727
* @author Steve Ebersole
2828
*/
2929
public class JpaCriteriaParameter<T>
30-
extends AbstractSqmExpression<T>
31-
implements SqmParameter<T>, QueryParameterImplementor<T> {
30+
extends AbstractSqmParameter<T>
31+
implements QueryParameterImplementor<T> {
3232
private final String name;
33-
private boolean allowsMultiValuedBinding;
3433

3534
public JpaCriteriaParameter(
3635
String name,
3736
BindableType<? super T> type,
3837
boolean allowsMultiValuedBinding,
3938
NodeBuilder nodeBuilder) {
40-
super( toSqmType( type, nodeBuilder ), nodeBuilder );
39+
super( allowsMultiValuedBinding, toSqmType( type, nodeBuilder ), nodeBuilder );
4140
this.name = name;
42-
this.allowsMultiValuedBinding = allowsMultiValuedBinding;
4341
}
4442

4543
protected JpaCriteriaParameter(JpaCriteriaParameter<T> original) {
46-
super( original.getNodeType(), original.nodeBuilder() );
44+
super( original.allowMultiValuedBinding(), original.getNodeType(), original.nodeBuilder() );
4745
this.name = original.name;
48-
this.allowsMultiValuedBinding = original.allowsMultiValuedBinding;
4946
}
5047

5148
private static <T> SqmExpressible<T> toSqmType(BindableType<T> type, NodeBuilder nodeBuilder) {
@@ -84,17 +81,7 @@ public Integer getTupleLength() {
8481

8582
@Override
8683
public boolean allowsMultiValuedBinding() {
87-
return allowsMultiValuedBinding;
88-
}
89-
90-
@Override
91-
public void disallowMultiValuedBinding() {
92-
allowsMultiValuedBinding = false;
93-
}
94-
95-
@Override
96-
public boolean allowMultiValuedBinding() {
97-
return allowsMultiValuedBinding();
84+
return allowMultiValuedBinding();
9885
}
9986

10087
@Override
@@ -129,11 +116,6 @@ public Class<T> getParameterType() {
129116
return nodeType == null ? null : nodeType.getExpressibleJavaType().getJavaTypeClass();
130117
}
131118

132-
@Override
133-
protected void internalApplyInferableType(SqmExpressible<?> newType) {
134-
super.internalApplyInferableType( newType );
135-
}
136-
137119
@Override
138120
public <X> X accept(SemanticQueryWalker<X> walker) {
139121
return walker.visitJpaCriteriaParameter( this );

0 commit comments

Comments
 (0)