Skip to content

Commit 230cbe9

Browse files
committed
HHH-19364 add Mutators
1 parent e60a076 commit 230cbe9

File tree

4 files changed

+33
-0
lines changed

4 files changed

+33
-0
lines changed

hibernate-core/src/main/java/org/hibernate/query/programmatic/MutationSpecification.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,11 @@
44
*/
55
package org.hibernate.query.programmatic;
66

7+
import jakarta.persistence.criteria.CommonAbstractCriteria;
78
import jakarta.persistence.criteria.CriteriaUpdate;
89
import jakarta.persistence.criteria.CriteriaDelete;
10+
import jakarta.persistence.criteria.CriteriaBuilder;
11+
import jakarta.persistence.criteria.Root;
912
import org.hibernate.Incubating;
1013
import org.hibernate.SharedSessionContract;
1114
import org.hibernate.query.IllegalMutationQueryException;
@@ -42,6 +45,13 @@ public interface MutationSpecification<T> extends QuerySpecification<T> {
4245
@Override
4346
MutationSpecification<T> addRestriction(Restriction<T> restriction);
4447

48+
@FunctionalInterface
49+
interface Mutator<T> {
50+
void mutate(CriteriaBuilder builder, CommonAbstractCriteria query, Root<T> mutationTarget);
51+
}
52+
53+
MutationSpecification<T> mutate(Mutator<T> mutation);
54+
4555
/**
4656
* Finalize the building and create the {@linkplain SelectionQuery} instance.
4757
*/

hibernate-core/src/main/java/org/hibernate/query/programmatic/SelectionSpecification.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
package org.hibernate.query.programmatic;
66

77
import jakarta.persistence.criteria.CriteriaQuery;
8+
import jakarta.persistence.criteria.CriteriaBuilder;
9+
import jakarta.persistence.criteria.Root;
810
import org.hibernate.Incubating;
911
import org.hibernate.SharedSessionContract;
1012
import org.hibernate.query.IllegalSelectQueryException;
@@ -89,6 +91,13 @@ public interface SelectionSpecification<T> extends QuerySpecification<T> {
8991
@Override
9092
SelectionSpecification<T> addRestriction(Restriction<T> restriction);
9193

94+
@FunctionalInterface
95+
interface Mutator<T> {
96+
void mutate(CriteriaBuilder builder, CriteriaQuery<T> query, Root<T> root);
97+
}
98+
99+
SelectionSpecification<T> mutate(Mutator<T> mutation);
100+
92101
/**
93102
* Covariant override.
94103
*/

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,13 @@ public MutationSpecification<T> addRestriction(Restriction<T> restriction) {
7373
return this;
7474
}
7575

76+
@Override
77+
public MutationSpecification<T> mutate(Mutator<T> mutation) {
78+
specifications.add( (sqmStatement, mutationTargetRoot) ->
79+
mutation.mutate( sqmStatement.nodeBuilder(), sqmStatement, mutationTargetRoot ) );
80+
return this;
81+
}
82+
7683
@Override
7784
public MutationQuery createQuery(SharedSessionContract session) {
7885
final var sessionImpl = (SharedSessionContractImplementor) session;

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,13 @@ public SelectionSpecification<T> addRestriction(Restriction<T> restriction) {
7171
return this;
7272
}
7373

74+
@Override
75+
public SelectionSpecification<T> mutate(Mutator<T> mutation) {
76+
specifications.add( (sqmStatement, root) ->
77+
mutation.mutate( sqmStatement.nodeBuilder(), sqmStatement, root ) );
78+
return this;
79+
}
80+
7481
@Override
7582
public SelectionSpecification<T> addOrdering(Order<T> order) {
7683
specifications.add( (sqmStatement, root) -> {

0 commit comments

Comments
 (0)