Skip to content

Commit d9b2011

Browse files
committed
HHH-19781 Copy original criteria to avoid duplicated specifications
Also avoid double-copy for HQL-based specifications
1 parent 416f6fc commit d9b2011

File tree

2 files changed

+7
-4
lines changed

2 files changed

+7
-4
lines changed

hibernate-core/src/main/java/org/hibernate/query/specification/internal/MutationSpecificationImpl.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
import java.util.function.BiConsumer;
4141

4242
import static org.hibernate.query.sqm.tree.SqmCopyContext.noParamCopyContext;
43+
import static org.hibernate.query.sqm.tree.SqmCopyContext.simpleContext;
4344

4445
/**
4546
* Standard implementation of {@link MutationSpecification}.
@@ -140,7 +141,7 @@ public MutationQuery createQuery(StatelessSession session) {
140141
public MutationQuery createQuery(SharedSessionContract session) {
141142
final var sessionImpl = session.unwrap(SharedSessionContractImplementor.class);
142143
final var sqmStatement = build( sessionImpl.getFactory().getQueryEngine() );
143-
return new SqmQueryImpl<>( sqmStatement, true, null, sessionImpl );
144+
return new SqmQueryImpl<>( sqmStatement, false, null, sessionImpl );
144145
}
145146

146147
private SqmDeleteOrUpdateStatement<T> build(QueryEngine queryEngine) {
@@ -151,7 +152,8 @@ private SqmDeleteOrUpdateStatement<T> build(QueryEngine queryEngine) {
151152
mutationTargetRoot = resolveSqmRoot( sqmStatement, mutationTarget );
152153
}
153154
else if ( deleteOrUpdateStatement != null ) {
154-
sqmStatement = deleteOrUpdateStatement;
155+
sqmStatement = (SqmDeleteOrUpdateStatement<T>) deleteOrUpdateStatement
156+
.copy( simpleContext() );
155157
mutationTargetRoot = resolveSqmRoot( sqmStatement,
156158
sqmStatement.getTarget().getManagedType().getJavaType() );
157159
}

hibernate-core/src/main/java/org/hibernate/query/specification/internal/SelectionSpecificationImpl.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
import static org.hibernate.internal.util.collections.CollectionHelper.isEmpty;
4141
import static org.hibernate.query.sqm.internal.SqmUtil.validateCriteriaQuery;
4242
import static org.hibernate.query.sqm.tree.SqmCopyContext.noParamCopyContext;
43+
import static org.hibernate.query.sqm.tree.SqmCopyContext.simpleContext;
4344

4445
/**
4546
* Standard implementation of {@link SelectionSpecification}.
@@ -164,7 +165,7 @@ public SelectionQuery<T> createQuery(StatelessSession session) {
164165
public SelectionQuery<T> createQuery(SharedSessionContract session) {
165166
final var sessionImpl = session.unwrap(SharedSessionContractImplementor.class);
166167
final var sqmStatement = build( sessionImpl.getFactory().getQueryEngine() );
167-
return new SqmSelectionQueryImpl<>( sqmStatement, true, resultType, sessionImpl );
168+
return new SqmSelectionQueryImpl<>( sqmStatement, false, resultType, sessionImpl );
168169
}
169170

170171
private SqmSelectStatement<T> build(QueryEngine queryEngine) {
@@ -175,7 +176,7 @@ private SqmSelectStatement<T> build(QueryEngine queryEngine) {
175176
sqmRoot = extractRoot( sqmStatement, resultType, hql );
176177
}
177178
else if ( criteriaQuery != null ) {
178-
sqmStatement = (SqmSelectStatement<T>) criteriaQuery;
179+
sqmStatement = ((SqmSelectStatement<T>) criteriaQuery).copy( simpleContext() );
179180
sqmRoot = extractRoot( sqmStatement, resultType, "criteria query" );
180181
}
181182
else {

0 commit comments

Comments
 (0)