Skip to content

Commit 611806d

Browse files
committed
HHH-15497 Count query when counting polymorphic subclasses by type fails when run twice
1 parent ae10541 commit 611806d

File tree

3 files changed

+10
-8
lines changed

3 files changed

+10
-8
lines changed

hibernate-core/src/main/java/org/hibernate/query/internal/QueryParameterBindingImpl.java

+1-3
Original file line numberDiff line numberDiff line change
@@ -51,9 +51,7 @@ public class QueryParameterBindingImpl<T> implements QueryParameterBinding<T>, J
5151
protected QueryParameterBindingImpl(
5252
QueryParameter<T> queryParameter,
5353
SessionFactoryImplementor sessionFactory) {
54-
this.queryParameter = queryParameter;
55-
this.sessionFactory = sessionFactory;
56-
this.bindType = queryParameter.getHibernateType();
54+
this( queryParameter, sessionFactory, queryParameter.getHibernateType() );
5755
}
5856

5957
/**

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

+5-5
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,7 @@
181181
import org.hibernate.query.sqm.tree.domain.SqmPluralValuedSimplePath;
182182
import org.hibernate.query.sqm.tree.domain.SqmTreatedPath;
183183
import org.hibernate.query.sqm.tree.domain.SqmTreatedRoot;
184+
import org.hibernate.query.sqm.tree.expression.AbstractSqmExpression;
184185
import org.hibernate.query.sqm.tree.expression.Conversion;
185186
import org.hibernate.query.sqm.tree.expression.JpaCriteriaParameter;
186187
import org.hibernate.query.sqm.tree.expression.SqmAliasedNodeRef;
@@ -4890,11 +4891,8 @@ protected Expression consumeSqmParameter(
48904891
final QueryParameterImplementor<?> queryParameter = domainParameterXref.getQueryParameter( sqmParameter );
48914892
final QueryParameterBinding binding = domainParameterBindings.getBinding( queryParameter );
48924893
if ( binding.setType( valueMapping ) ) {
4893-
replaceJdbcParametersType(
4894-
sqmParameter,
4895-
domainParameterXref.getSqmParameters( queryParameter ),
4896-
valueMapping
4897-
);
4894+
// Align the SqmParameter expressible type with the binding type
4895+
( (AbstractSqmExpression) sqmParameter ).forceInferableType( (SqmExpressible<?>) binding.getBindType() );
48984896
}
48994897
return new SqmParameterInterpretation(
49004898
sqmParameter,
@@ -6802,6 +6800,8 @@ private Predicate processInSingleParameter(
68026800

68036801
if ( !iterator.hasNext() ) {
68046802
domainParamBinding.setType( (MappingModelExpressible) determineValueMapping( sqmPredicate.getTestExpression(), fromClauseIndex ) );
6803+
// Align the SqmParameter expressible type with the binding type
6804+
( (AbstractSqmExpression) sqmParameter ).forceInferableType( (SqmExpressible<?>) domainParamBinding.getBindType() );
68056805
return inListPredicate;
68066806
}
68076807

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

+4
Original file line numberDiff line numberDiff line change
@@ -156,4 +156,8 @@ public JpaSelection<T> alias(String name) {
156156
public JavaType<T> getJavaTypeDescriptor() {
157157
return getNodeType() == null ? null : getNodeType().getExpressibleJavaType();
158158
}
159+
160+
public void forceInferableType(SqmExpressible<?> type){
161+
setExpressibleType( type );
162+
}
159163
}

0 commit comments

Comments
 (0)