Skip to content

Commit 2a63b6e

Browse files
committed
HHH-19364 move to a partially-detached model
1 parent 9355f51 commit 2a63b6e

File tree

12 files changed

+194
-329
lines changed

12 files changed

+194
-329
lines changed

hibernate-core/src/main/java/org/hibernate/engine/spi/SessionDelegatorBaseImpl.java

Lines changed: 0 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,6 @@
5858
import org.hibernate.query.SelectionQuery;
5959
import org.hibernate.query.criteria.HibernateCriteriaBuilder;
6060
import org.hibernate.query.criteria.JpaCriteriaInsert;
61-
import org.hibernate.query.programmatic.MutationSpecification;
62-
import org.hibernate.query.programmatic.SelectionSpecification;
6361
import org.hibernate.query.spi.QueryImplementor;
6462
import org.hibernate.query.spi.QueryProducerImplementor;
6563
import org.hibernate.query.sql.spi.NativeQueryImplementor;
@@ -657,36 +655,6 @@ public MutationQuery createNamedMutationQuery(String name) {
657655
return delegate.createNamedMutationQuery( name );
658656
}
659657

660-
@Override
661-
public <T> SelectionSpecification<T> createSelectionSpecification(String hql, Class<T> resultType) {
662-
return delegate.createSelectionSpecification( hql, resultType );
663-
}
664-
665-
@Override
666-
public <T> SelectionSpecification<T> createSelectionSpecification(Class<T> rootEntityType) {
667-
return delegate.createSelectionSpecification( rootEntityType );
668-
}
669-
670-
@Override
671-
public <T> SelectionSpecification<T> createSelectionSpecification(CriteriaQuery<T> criteria) {
672-
return delegate.createSelectionSpecification( criteria );
673-
}
674-
675-
@Override
676-
public <T> MutationSpecification<T> createMutationSpecification(String hql, Class<T> mutationTarget) {
677-
return delegate.createMutationSpecification( hql, mutationTarget );
678-
}
679-
680-
@Override
681-
public <T> MutationSpecification<T> createMutationSpecification(CriteriaUpdate<T> criteriaUpdate) {
682-
return delegate.createMutationSpecification( criteriaUpdate );
683-
}
684-
685-
@Override
686-
public <T> MutationSpecification<T> createMutationSpecification(CriteriaDelete<T> criteriaDelete) {
687-
return delegate.createMutationSpecification( criteriaDelete );
688-
}
689-
690658
@Override
691659
public MutationQuery createNativeMutationQuery(String sqlString) {
692660
return delegate.createNativeMutationQuery( sqlString );

hibernate-core/src/main/java/org/hibernate/engine/spi/SessionLazyDelegator.java

Lines changed: 0 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,6 @@
5353
import org.hibernate.query.SelectionQuery;
5454
import org.hibernate.query.criteria.HibernateCriteriaBuilder;
5555
import org.hibernate.query.criteria.JpaCriteriaInsert;
56-
import org.hibernate.query.programmatic.MutationSpecification;
57-
import org.hibernate.query.programmatic.SelectionSpecification;
5856
import org.hibernate.stat.SessionStatistics;
5957

6058
import java.util.Collection;
@@ -750,36 +748,6 @@ public MutationQuery createNamedMutationQuery(String name) {
750748
return this.lazySession.get().createNamedMutationQuery( name );
751749
}
752750

753-
@Override
754-
public <T> SelectionSpecification<T> createSelectionSpecification(String hql, Class<T> resultType) {
755-
return this.lazySession.get().createSelectionSpecification( hql, resultType );
756-
}
757-
758-
@Override
759-
public <T> SelectionSpecification<T> createSelectionSpecification(Class<T> rootEntityType) {
760-
return this.lazySession.get().createSelectionSpecification( rootEntityType );
761-
}
762-
763-
@Override
764-
public <T> SelectionSpecification<T> createSelectionSpecification(CriteriaQuery<T> criteria) {
765-
return this.lazySession.get().createSelectionSpecification( criteria );
766-
}
767-
768-
@Override
769-
public <T> MutationSpecification<T> createMutationSpecification(String hql, Class<T> mutationTarget) {
770-
return this.lazySession.get().createMutationSpecification( hql, mutationTarget );
771-
}
772-
773-
@Override
774-
public <T> MutationSpecification<T> createMutationSpecification(CriteriaUpdate<T> criteriaUpdate) {
775-
return this.lazySession.get().createMutationSpecification( criteriaUpdate );
776-
}
777-
778-
@Override
779-
public <T> MutationSpecification<T> createMutationSpecification(CriteriaDelete<T> criteriaDelete) {
780-
return this.lazySession.get().createMutationSpecification( criteriaDelete );
781-
}
782-
783751
@SuppressWarnings("rawtypes")
784752
@Override
785753
@Deprecated

hibernate-core/src/main/java/org/hibernate/engine/spi/SharedSessionDelegatorBaseImpl.java

Lines changed: 0 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,6 @@
3636
import org.hibernate.query.SelectionQuery;
3737
import org.hibernate.query.criteria.HibernateCriteriaBuilder;
3838
import org.hibernate.query.criteria.JpaCriteriaInsert;
39-
import org.hibernate.query.programmatic.MutationSpecification;
40-
import org.hibernate.query.programmatic.SelectionSpecification;
4139
import org.hibernate.query.spi.QueryImplementor;
4240
import org.hibernate.query.spi.QueryProducerImplementor;
4341
import org.hibernate.query.sql.spi.NativeQueryImplementor;
@@ -229,36 +227,6 @@ public MutationQuery createNamedMutationQuery(String name) {
229227
return delegate.createNamedMutationQuery( name );
230228
}
231229

232-
@Override
233-
public <T> SelectionSpecification<T> createSelectionSpecification(String hql, Class<T> resultType) {
234-
return delegate.createSelectionSpecification( hql, resultType );
235-
}
236-
237-
@Override
238-
public <T> SelectionSpecification<T> createSelectionSpecification(Class<T> rootEntityType) {
239-
return delegate.createSelectionSpecification( rootEntityType );
240-
}
241-
242-
@Override
243-
public <T> SelectionSpecification<T> createSelectionSpecification(CriteriaQuery<T> criteria) {
244-
return delegate.createSelectionSpecification( criteria );
245-
}
246-
247-
@Override
248-
public <T> MutationSpecification<T> createMutationSpecification(String hql, Class<T> mutationTarget) {
249-
return delegate.createMutationSpecification( hql, mutationTarget );
250-
}
251-
252-
@Override
253-
public <T> MutationSpecification<T> createMutationSpecification(CriteriaUpdate<T> criteriaUpdate) {
254-
return delegate.createMutationSpecification( criteriaUpdate );
255-
}
256-
257-
@Override
258-
public <T> MutationSpecification<T> createMutationSpecification(CriteriaDelete<T> criteriaDelete) {
259-
return delegate.createMutationSpecification( criteriaDelete );
260-
}
261-
262230
@Override
263231
public MutationQuery createNativeMutationQuery(String sqlString) {
264232
return delegate.createNativeMutationQuery( sqlString );

hibernate-core/src/main/java/org/hibernate/internal/AbstractSharedSessionContract.java

Lines changed: 0 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -71,10 +71,6 @@
7171
import org.hibernate.query.hql.spi.SqmQueryImplementor;
7272
import org.hibernate.query.named.NamedObjectRepository;
7373
import org.hibernate.query.named.NamedResultSetMappingMemento;
74-
import org.hibernate.query.programmatic.MutationSpecification;
75-
import org.hibernate.query.programmatic.SelectionSpecification;
76-
import org.hibernate.query.programmatic.internal.MutationSpecificationImpl;
77-
import org.hibernate.query.programmatic.internal.SelectionSpecificationImpl;
7874
import org.hibernate.query.spi.HqlInterpretation;
7975
import org.hibernate.query.spi.QueryImplementor;
8076
import org.hibernate.query.sql.internal.NativeQueryImpl;
@@ -1260,36 +1256,6 @@ public MutationQuery createNamedMutationQuery(String queryName) {
12601256
memento -> createNativeQueryImplementor( queryName, memento ) );
12611257
}
12621258

1263-
@Override
1264-
public <T> SelectionSpecification<T> createSelectionSpecification(String hql, Class<T> resultType) {
1265-
return new SelectionSpecificationImpl<>( hql, resultType, this );
1266-
}
1267-
1268-
@Override
1269-
public <T> SelectionSpecification<T> createSelectionSpecification(Class<T> rootEntityType) {
1270-
return new SelectionSpecificationImpl<>( rootEntityType, this );
1271-
}
1272-
1273-
@Override
1274-
public <T> SelectionSpecification<T> createSelectionSpecification(CriteriaQuery<T> criteria) {
1275-
return new SelectionSpecificationImpl<>( criteria, this );
1276-
}
1277-
1278-
@Override
1279-
public <T> MutationSpecification<T> createMutationSpecification(String hql, Class<T> mutationTarget) {
1280-
return new MutationSpecificationImpl<>( hql, mutationTarget, this );
1281-
}
1282-
1283-
@Override
1284-
public <T> MutationSpecification<T> createMutationSpecification(CriteriaDelete<T> criteriaDelete) {
1285-
return new MutationSpecificationImpl<>( criteriaDelete, this );
1286-
}
1287-
1288-
@Override
1289-
public <T> MutationSpecification<T> createMutationSpecification(CriteriaUpdate<T> criteriaUpdate) {
1290-
return new MutationSpecificationImpl<>( criteriaUpdate, this );
1291-
}
1292-
12931259
protected <T> NativeQueryImplementor<T> createNativeQueryImplementor(String queryName, NamedNativeQueryMemento<T> memento) {
12941260
final NativeQueryImplementor<T> query = memento.toQuery( this );
12951261
final Boolean isUnequivocallySelect = query.isSelectQuery();

hibernate-core/src/main/java/org/hibernate/query/QueryProducer.java

Lines changed: 0 additions & 105 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,7 @@
99
import jakarta.persistence.criteria.CriteriaDelete;
1010
import jakarta.persistence.criteria.CriteriaQuery;
1111
import jakarta.persistence.criteria.CriteriaUpdate;
12-
import org.hibernate.Incubating;
1312
import org.hibernate.query.criteria.JpaCriteriaInsert;
14-
import org.hibernate.query.programmatic.MutationSpecification;
15-
import org.hibernate.query.programmatic.SelectionSpecification;
1613

1714
/**
1815
* Contract for things that can produce instances of {@link Query} and {@link NativeQuery}.
@@ -499,108 +496,6 @@ public interface QueryProducer {
499496
*/
500497
MutationQuery createNamedMutationQuery(String name);
501498

502-
/**
503-
* Returns a specification reference which can be used to programmatically,
504-
* iteratively build a {@linkplain SelectionQuery} based on a base HQL statement,
505-
* allowing the addition of {@linkplain SelectionSpecification#addOrdering sorting}
506-
* and {@linkplain SelectionSpecification#addRestriction restrictions}.
507-
*
508-
* @param hql The base HQL query.
509-
* @param resultType The result type which will ultimately be returned from the {@linkplain SelectionQuery}
510-
*
511-
* @param <T> The root entity type for the query.
512-
* {@code resultType} and {@code <T>} are both expected to refer to a singular query root.
513-
*
514-
* @throws IllegalSelectQueryException The given HQL is expected to be a {@code select} query. This method will
515-
* throw an exception if not.
516-
*
517-
* @since 7.0
518-
*/
519-
@Incubating
520-
<T> SelectionSpecification<T> createSelectionSpecification(String hql, Class<T> resultType)
521-
throws IllegalSelectQueryException;
522-
523-
/**
524-
* Returns a specification reference which can be used to programmatically,
525-
* iteratively build a {@linkplain SelectionQuery} for the given entity type,
526-
* allowing the addition of {@linkplain SelectionSpecification#addOrdering sorting}
527-
* and {@linkplain SelectionSpecification#addRestriction restrictions}.
528-
* This is effectively the same as calling {@linkplain QueryProducer#createSelectionSpecification(String, Class)}
529-
* with {@code "from {rootEntityType}"} as the HQL.
530-
*
531-
* @param rootEntityType The entity type which is the root of the query.
532-
*
533-
* @param <T> The entity type which is the root of the query.
534-
* {@code resultType} and {@code <T>} are both expected to refer to a singular query root.
535-
*
536-
* @since 7.0
537-
*/
538-
@Incubating
539-
<T> SelectionSpecification<T> createSelectionSpecification(Class<T> rootEntityType);
540-
541-
/**
542-
* Returns a specification reference which can be used to programmatically,
543-
* iteratively build a {@linkplain SelectionQuery} for the given criteria query,
544-
* allowing the addition of {@linkplain SelectionSpecification#addOrdering sorting}
545-
* and {@linkplain SelectionSpecification#addRestriction restrictions}.
546-
*
547-
* @param criteria The criteria query
548-
*
549-
* @param <T> The entity type which is the root of the query.
550-
*
551-
* @since 7.0
552-
*/
553-
@Incubating
554-
<T> SelectionSpecification<T> createSelectionSpecification(CriteriaQuery<T> criteria);
555-
556-
/**
557-
* Returns a specification reference which can be used to programmatically,
558-
* iteratively build a {@linkplain MutationQuery} based on a base HQL statement,
559-
* allowing the addition of {@linkplain MutationSpecification#addRestriction restrictions}.
560-
*
561-
* @param hql The base HQL query (expected to be an {@code update} or {@code delete} query).
562-
* @param mutationTarget The entity which is the target of the mutation.
563-
*
564-
* @param <T> The root entity type for the mutation (the "target").
565-
* {@code mutationTarget} and {@code <T>} are both expected to refer to the mutation target.
566-
*
567-
* @throws IllegalMutationQueryException Only {@code update} and {@code delete} are supported;
568-
* this method will throw an exception if the given HQL query is not an {@code update} or {@code delete}.
569-
*
570-
* @since 7.0
571-
*/
572-
@Incubating
573-
<T> MutationSpecification<T> createMutationSpecification(String hql, Class<T> mutationTarget)
574-
throws IllegalMutationQueryException;
575-
576-
/**
577-
* Returns a specification reference which can be used to programmatically,
578-
* iteratively build a {@linkplain MutationQuery} based on the given criteria update,
579-
* allowing the addition of {@linkplain MutationSpecification#addRestriction restrictions}.
580-
*
581-
* @param criteriaUpdate The criteria update query
582-
*
583-
* @param <T> The root entity type for the mutation (the "target").
584-
*
585-
* @since 7.0
586-
*/
587-
@Incubating
588-
<T> MutationSpecification<T> createMutationSpecification(CriteriaUpdate<T> criteriaUpdate);
589-
590-
/**
591-
* Returns a specification reference which can be used to programmatically,
592-
* iteratively build a {@linkplain MutationQuery} based on the given criteria delete,
593-
* allowing the addition of {@linkplain MutationSpecification#addRestriction restrictions}.
594-
*
595-
* @param criteriaDelete The criteria delete query
596-
*
597-
* @param <T> The root entity type for the mutation (the "target").
598-
*
599-
* @since 7.0
600-
*/
601-
@Incubating
602-
<T> MutationSpecification<T> createMutationSpecification(CriteriaDelete<T> criteriaDelete);
603-
604499
/**
605500
* Create a {@link Query} instance for the named query.
606501
*

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

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

7+
import jakarta.persistence.EntityManagerFactory;
78
import jakarta.persistence.criteria.Root;
9+
import jakarta.persistence.criteria.CriteriaUpdate;
10+
import jakarta.persistence.criteria.CriteriaDelete;
811
import org.hibernate.Incubating;
12+
import org.hibernate.SharedSessionContract;
13+
import org.hibernate.engine.spi.SessionFactoryImplementor;
14+
import org.hibernate.query.IllegalMutationQueryException;
915
import org.hibernate.query.MutationQuery;
1016
import org.hibernate.query.SelectionQuery;
17+
import org.hibernate.query.programmatic.internal.MutationSpecificationImpl;
1118
import org.hibernate.query.restriction.Restriction;
1219

1320
/**
@@ -20,7 +27,7 @@
2027
* kinds.
2128
* <p>
2229
* Once all {@linkplain #addRestriction restrictions} are specified, call
23-
* {@linkplain #createQuery()} to obtain an {@linkplain SelectionQuery an
30+
* {@linkplain QuerySpecification#createQuery(SharedSessionContract)} to obtain an {@linkplain SelectionQuery an
2431
* executable mutation query object}.
2532
*
2633
* @param <T> The entity type which is the target of the mutation.
@@ -48,5 +55,49 @@ default Root<T> getMutationTarget() {
4855
* Finalize the building and create the {@linkplain SelectionQuery} instance.
4956
*/
5057
@Override
51-
MutationQuery createQuery();
58+
MutationQuery createQuery(SharedSessionContract session);
59+
60+
/**
61+
* Returns a specification reference which can be used to programmatically,
62+
* iteratively build a {@linkplain MutationQuery} based on a base HQL statement,
63+
* allowing the addition of {@linkplain MutationSpecification#addRestriction restrictions}.
64+
*
65+
* @param hql The base HQL query (expected to be an {@code update} or {@code delete} query).
66+
* @param mutationTarget The entity which is the target of the mutation.
67+
*
68+
* @param <T> The root entity type for the mutation (the "target").
69+
* {@code mutationTarget} and {@code <T>} are both expected to refer to the mutation target.
70+
*
71+
* @throws IllegalMutationQueryException Only {@code update} and {@code delete} are supported;
72+
* this method will throw an exception if the given HQL query is not an {@code update} or {@code delete}.
73+
*/
74+
static <T> MutationSpecification<T> create(EntityManagerFactory factory, Class<T> entityClass, String hql) {
75+
return new MutationSpecificationImpl<>( hql, entityClass, (SessionFactoryImplementor) factory );
76+
}
77+
78+
/**
79+
* Returns a specification reference which can be used to programmatically,
80+
* iteratively build a {@linkplain MutationQuery} based on the given criteria update,
81+
* allowing the addition of {@linkplain MutationSpecification#addRestriction restrictions}.
82+
*
83+
* @param criteriaUpdate The criteria update query
84+
*
85+
* @param <T> The root entity type for the mutation (the "target").
86+
*/
87+
static <T> MutationSpecification<T> create(CriteriaUpdate<T> criteriaUpdate) {
88+
return new MutationSpecificationImpl<>( criteriaUpdate );
89+
}
90+
91+
/**
92+
* Returns a specification reference which can be used to programmatically,
93+
* iteratively build a {@linkplain MutationQuery} based on the given criteria delete,
94+
* allowing the addition of {@linkplain MutationSpecification#addRestriction restrictions}.
95+
*
96+
* @param criteriaDelete The criteria delete query
97+
*
98+
* @param <T> The root entity type for the mutation (the "target").
99+
*/
100+
static <T> MutationSpecification<T> create(CriteriaDelete<T> criteriaDelete) {
101+
return new MutationSpecificationImpl<>( criteriaDelete );
102+
}
52103
}

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import jakarta.persistence.criteria.CommonAbstractCriteria;
88
import jakarta.persistence.criteria.Root;
99
import org.hibernate.Incubating;
10+
import org.hibernate.SharedSessionContract;
1011
import org.hibernate.query.CommonQueryContract;
1112
import org.hibernate.query.restriction.Restriction;
1213

@@ -49,5 +50,5 @@ public interface QuerySpecification<T> {
4950
/**
5051
* Finalize the building and create executable query instance.
5152
*/
52-
CommonQueryContract createQuery();
53+
CommonQueryContract createQuery(SharedSessionContract session);
5354
}

0 commit comments

Comments
 (0)