Skip to content

Commit 39e25e2

Browse files
committed
HHH-19781 Copy original criteria to avoid duplicated specifications
Also avoid double-copy for HQL-based specifications
1 parent 3040969 commit 39e25e2

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}.
@@ -122,7 +123,7 @@ public MutationQuery createQuery(StatelessSession session) {
122123
public MutationQuery createQuery(SharedSessionContract session) {
123124
final var sessionImpl = session.unwrap(SharedSessionContractImplementor.class);
124125
final var sqmStatement = build( sessionImpl.getFactory().getQueryEngine() );
125-
return new SqmQueryImpl<>( sqmStatement, true, null, sessionImpl );
126+
return new SqmQueryImpl<>( sqmStatement, false, null, sessionImpl );
126127
}
127128

128129
private SqmDeleteOrUpdateStatement<T> build(QueryEngine queryEngine) {
@@ -133,7 +134,8 @@ private SqmDeleteOrUpdateStatement<T> build(QueryEngine queryEngine) {
133134
mutationTargetRoot = resolveSqmRoot( sqmStatement, mutationTarget );
134135
}
135136
else if ( deleteOrUpdateStatement != null ) {
136-
sqmStatement = deleteOrUpdateStatement;
137+
sqmStatement = (SqmDeleteOrUpdateStatement<T>) deleteOrUpdateStatement
138+
.copy( simpleContext() );
137139
mutationTargetRoot = resolveSqmRoot( sqmStatement,
138140
sqmStatement.getTarget().getManagedType().getJavaType() );
139141
}

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}.
@@ -160,7 +161,7 @@ public SelectionQuery<T> createQuery(StatelessSession session) {
160161
public SelectionQuery<T> createQuery(SharedSessionContract session) {
161162
final var sessionImpl = session.unwrap(SharedSessionContractImplementor.class);
162163
final var sqmStatement = build( sessionImpl.getFactory().getQueryEngine() );
163-
return new SqmSelectionQueryImpl<>( sqmStatement, true, resultType, sessionImpl );
164+
return new SqmSelectionQueryImpl<>( sqmStatement, false, resultType, sessionImpl );
164165
}
165166

166167
private SqmSelectStatement<T> build(QueryEngine queryEngine) {
@@ -171,7 +172,7 @@ private SqmSelectStatement<T> build(QueryEngine queryEngine) {
171172
sqmRoot = extractRoot( sqmStatement, resultType, hql );
172173
}
173174
else if ( criteriaQuery != null ) {
174-
sqmStatement = (SqmSelectStatement<T>) criteriaQuery;
175+
sqmStatement = ((SqmSelectStatement<T>) criteriaQuery).copy( simpleContext() );
175176
sqmRoot = extractRoot( sqmStatement, resultType, "criteria query" );
176177
}
177178
else {

0 commit comments

Comments
 (0)