Skip to content

Commit 3652080

Browse files
committed
HHH-19364 remove SelectionQuery.addRestriction()
1 parent 4fc8590 commit 3652080

File tree

9 files changed

+81
-103
lines changed

9 files changed

+81
-103
lines changed

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

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@
2626
import org.hibernate.dialect.Dialect;
2727
import org.hibernate.graph.GraphSemantic;
2828
import org.hibernate.graph.RootGraph;
29-
import org.hibernate.query.restriction.Restriction;
3029
import org.hibernate.query.spi.QueryOptions;
3130
import org.hibernate.transform.ResultTransformer;
3231

@@ -935,9 +934,6 @@ default Query<R> setPage(Page page) {
935934
@Override @Incubating
936935
Query<R> setOrder(Order<? super R> order);
937936

938-
@Override @Incubating
939-
Query<R> addRestriction(Restriction<? super R> restriction);
940-
941937
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
942938
// deprecated methods
943939

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

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@
3535
import jakarta.persistence.TemporalType;
3636
import org.hibernate.engine.profile.DefaultFetchProfile;
3737
import org.hibernate.graph.GraphSemantic;
38-
import org.hibernate.query.restriction.Restriction;
3938

4039
/**
4140
* Within the context of an active {@linkplain org.hibernate.Session session},
@@ -623,19 +622,6 @@ default Stream<R> stream() {
623622
@Incubating
624623
SelectionQuery<R> setOrder(Order<? super R> order);
625624

626-
/**
627-
* If the result type of this query is an entity class, add a
628-
* {@linkplain Restriction rule} for restricting the query results.
629-
*
630-
* @param restriction an instance of {@link Restriction}
631-
*
632-
* @see Restriction
633-
*
634-
* @since 7.0
635-
*/
636-
@Incubating
637-
SelectionQuery<R> addRestriction(Restriction<? super R> restriction);
638-
639625
/**
640626
* Specifies whether follow-on locking should be applied
641627
*/

hibernate-core/src/main/java/org/hibernate/query/restriction/Restriction.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
import org.hibernate.Incubating;
1313
import org.hibernate.Internal;
1414
import org.hibernate.query.Order;
15-
import org.hibernate.query.SelectionQuery;
1615
import org.hibernate.query.criteria.JpaCriteriaQuery;
1716
import org.hibernate.query.range.Range;
1817

@@ -21,7 +20,7 @@
2120
/**
2221
* A rule for restricting query results. This allows restrictions to be added to
2322
* a {@link org.hibernate.query.programmatic.SelectionSpecification} by calling
24-
* {@link SelectionQuery#addRestriction(Restriction)}.
23+
* {@link org.hibernate.query.programmatic.SelectionSpecification#restrict(Restriction)}.
2524
* <pre>
2625
* SelectionSpecification.create(Book.class)
2726
* .restrict(Restriction.like(Book_.title, "%Hibernate%", false))

hibernate-core/src/main/java/org/hibernate/query/spi/AbstractQuery.java

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@
3939
import org.hibernate.query.Order;
4040
import org.hibernate.query.Query;
4141
import org.hibernate.query.QueryParameter;
42-
import org.hibernate.query.restriction.Restriction;
4342
import org.hibernate.query.ResultListTransformer;
4443
import org.hibernate.query.TupleTransformer;
4544
import org.hibernate.query.named.NamedQueryMemento;
@@ -301,11 +300,6 @@ public Query<R> setOrder(Order<? super R> order) {
301300
throw new UnsupportedOperationException( "Should be implemented by " + this.getClass().getName() );
302301
}
303302

304-
@Override
305-
public Query<R> addRestriction(Restriction<? super R> restriction) {
306-
throw new UnsupportedOperationException( "Should be implemented by " + this.getClass().getName() );
307-
}
308-
309303
@Override
310304
public String getComment() {
311305
return super.getComment();

hibernate-core/src/main/java/org/hibernate/query/sql/internal/NativeQueryImpl.java

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,6 @@
5555
import org.hibernate.query.PathException;
5656
import org.hibernate.query.Query;
5757
import org.hibernate.query.QueryParameter;
58-
import org.hibernate.query.restriction.Restriction;
5958
import org.hibernate.query.ResultListTransformer;
6059
import org.hibernate.query.TupleTransformer;
6160
import org.hibernate.query.internal.DelegatingDomainQueryExecutionContext;
@@ -1662,11 +1661,6 @@ public Query<R> setOrder(Order<? super R> order) {
16621661
throw new UnsupportedOperationException("Ordering not currently supported for native queries");
16631662
}
16641663

1665-
@Override
1666-
public Query<R> addRestriction(Restriction<? super R> restriction) {
1667-
throw new UnsupportedOperationException("Restrictions not currently supported for native queries");
1668-
}
1669-
16701664
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
16711665
// Hints
16721666

hibernate-core/src/main/java/org/hibernate/query/sqm/internal/AbstractSqmSelectionQuery.java

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
import org.hibernate.query.Order;
1616
import org.hibernate.query.Page;
1717
import org.hibernate.query.QueryLogging;
18-
import org.hibernate.query.restriction.Restriction;
1918
import org.hibernate.query.SelectionQuery;
2019
import org.hibernate.query.criteria.JpaSelection;
2120
import org.hibernate.query.hql.internal.QuerySplitter;
@@ -205,16 +204,16 @@ public SelectionQuery<R> setOrder(Order<? super R> order) {
205204
return this;
206205
}
207206

208-
@Override
209-
public SelectionQuery<R> addRestriction(Restriction<? super R> restriction) {
210-
final SqmSelectStatement<R> selectStatement = getSqmSelectStatement().copy( noParamCopyContext( SqmQuerySource.CRITERIA ) );
211-
restriction.apply( selectStatement, selectStatement.<R>getRoot( 0, getExpectedResultType() ) );
212-
// TODO: when the QueryInterpretationCache can handle caching criteria queries,
213-
// simply cache the new SQM as if it were a criteria query, and remove this:
214-
getQueryOptions().setQueryPlanCachingEnabled( false );
215-
setSqmStatement( selectStatement );
216-
return this;
217-
}
207+
// @Override
208+
// public SelectionQuery<R> addRestriction(Restriction<? super R> restriction) {
209+
// final SqmSelectStatement<R> selectStatement = getSqmSelectStatement().copy( noParamCopyContext( SqmQuerySource.CRITERIA ) );
210+
// restriction.apply( selectStatement, selectStatement.<R>getRoot( 0, getExpectedResultType() ) );
211+
// // TODO: when the QueryInterpretationCache can handle caching criteria queries,
212+
// // simply cache the new SQM as if it were a criteria query, and remove this:
213+
// getQueryOptions().setQueryPlanCachingEnabled( false );
214+
// setSqmStatement( selectStatement );
215+
// return this;
216+
// }
218217

219218
@Override
220219
public SelectionQuery<R> setPage(Page page) {

hibernate-core/src/main/java/org/hibernate/query/sqm/internal/QuerySqmImpl.java

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,6 @@
4747
import org.hibernate.query.hql.spi.SqmQueryImplementor;
4848
import org.hibernate.query.internal.DelegatingDomainQueryExecutionContext;
4949
import org.hibernate.query.internal.ParameterMetadataImpl;
50-
import org.hibernate.query.restriction.Restriction;
5150
import org.hibernate.query.spi.DelegatingQueryOptions;
5251
import org.hibernate.query.spi.DomainQueryExecutionContext;
5352
import org.hibernate.query.spi.HqlInterpretation;
@@ -781,12 +780,6 @@ public Query<R> setOrder(Order<? super R> order) {
781780
return this;
782781
}
783782

784-
@Override
785-
public Query<R> addRestriction(Restriction<? super R> restriction) {
786-
super.addRestriction( restriction );
787-
return this;
788-
}
789-
790783
@Override
791784
public Query<R> setOrder(List<? extends Order<? super R>> orders) {
792785
super.setOrder(orders);

hibernate-core/src/main/java/org/hibernate/query/sqm/spi/DelegatingSqmSelectionQueryImplementor.java

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@
3131
import org.hibernate.query.QueryParameter;
3232
import org.hibernate.query.ResultListTransformer;
3333
import org.hibernate.query.TupleTransformer;
34-
import org.hibernate.query.restriction.Restriction;
3534
import org.hibernate.query.spi.QueryOptions;
3635
import org.hibernate.query.sqm.SqmSelectionQuery;
3736
import org.hibernate.query.sqm.tree.SqmStatement;
@@ -310,12 +309,6 @@ public SqmSelectionQueryImplementor<R> setOrder(Order<? super R> order) {
310309
return this;
311310
}
312311

313-
@Override
314-
public SqmSelectionQueryImplementor<R> addRestriction(Restriction<? super R> restriction) {
315-
getDelegate().addRestriction( restriction );
316-
return this;
317-
}
318-
319312
@Override
320313
public SqmSelectionQueryImplementor<R> setFollowOnLocking(boolean enable) {
321314
getDelegate().setFollowOnLocking( enable );

hibernate-core/src/test/java/org/hibernate/orm/test/query/restriction/RestrictionTest.java

Lines changed: 70 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
import java.util.List;
1818

19+
import org.hibernate.query.programmatic.SelectionSpecification;
1920
import static org.hibernate.query.Order.asc;
2021
import static org.hibernate.query.Order.desc;
2122
import static org.hibernate.query.restriction.Path.from;
@@ -57,92 +58,108 @@ void test(SessionFactoryScope scope) {
5758
var pages = (SingularAttribute<? super Book, Integer>) bookType.findSingularAttribute("pages");
5859

5960
Book book = scope.fromSession( session ->
60-
session.createSelectionQuery( "from Book", Book.class )
61-
.addRestriction( equal( isbn, "9781932394153" ) )
61+
SelectionSpecification.create( Book.class, "from Book" )
62+
.restrict( equal( isbn, "9781932394153" ) )
63+
.createQuery( session )
6264
.getSingleResult() );
6365
assertEquals( "Hibernate in Action", book.title );
6466
List<Book> books = scope.fromSession( session ->
65-
session.createSelectionQuery( "from Book", Book.class)
66-
.addRestriction( like( title, "%Hibernate%" ) )
67+
SelectionSpecification.create( Book.class, "from Book" )
68+
.restrict( like( title, "%Hibernate%" ) )
69+
.createQuery( session )
6770
.setOrder( desc( title ) )
6871
.getResultList() );
6972
assertEquals( 2, books.size() );
7073
assertEquals( "Java Persistence with Hibernate", books.get(0).title );
7174
assertEquals( "Hibernate in Action", books.get(1).title );
7275
List<Book> booksByIsbn = scope.fromSession( session ->
73-
session.createSelectionQuery( "from Book", Book.class)
74-
.addRestriction( in( isbn, List.of("9781932394153", "9781617290459") ) )
76+
SelectionSpecification.create( Book.class, "from Book" )
77+
.restrict( in( isbn, List.of("9781932394153", "9781617290459") ) )
78+
.createQuery( session )
7579
.setOrder( asc( title ) )
7680
.getResultList() );
7781
assertEquals( 2, booksByIsbn.size() );
7882
assertEquals( "Hibernate in Action", booksByIsbn.get(0).title );
7983
assertEquals( "Java Persistence with Hibernate", booksByIsbn.get(1).title );
8084
List<Book> booksByPages = scope.fromSession( session ->
81-
session.createSelectionQuery( "from Book", Book.class)
82-
.addRestriction( greaterThan( pages, 500 ) )
85+
SelectionSpecification.create( Book.class, "from Book" )
86+
.restrict( greaterThan( pages, 500 ) )
87+
.createQuery( session )
8388
.getResultList() );
8489
assertEquals( 1, booksByPages.size() );
8590
List<Book> booksByPageRange = scope.fromSession( session ->
86-
session.createSelectionQuery( "from Book", Book.class)
87-
.addRestriction( between( pages, 150, 400 ) )
91+
SelectionSpecification.create( Book.class, "from Book" )
92+
.restrict( between( pages, 150, 400 ) )
93+
.createQuery( session )
8894
.getResultList() );
8995
assertEquals( 1, booksByPageRange.size() );
9096
Book bookByTitle = scope.fromSession( session ->
91-
session.createSelectionQuery( "from Book", Book.class)
92-
.addRestriction( equalIgnoringCase( title, "hibernate in action" ) )
97+
SelectionSpecification.create( Book.class, "from Book" )
98+
.restrict( equalIgnoringCase( title, "hibernate in action" ) )
99+
.createQuery( session )
93100
.getSingleResultOrNull() );
94101
assertEquals( "9781932394153", bookByTitle.isbn );
95102
Book bookByTitleUnsafe = scope.fromSession( session ->
96-
session.createSelectionQuery( "from Book", Book.class)
97-
.addRestriction( restrict( Book.class, "title",
103+
SelectionSpecification.create( Book.class, "from Book" )
104+
.restrict( restrict( Book.class, "title",
98105
singleCaseInsensitiveValue("hibernate in action") ) )
106+
.createQuery( session )
99107
.getSingleResultOrNull() );
100108
assertEquals( "9781932394153", bookByTitleUnsafe.isbn );
101109
List<Book> allBooks = scope.fromSession( session ->
102-
session.createSelectionQuery( "from Book", Book.class)
103-
.addRestriction( unrestricted() )
110+
SelectionSpecification.create( Book.class, "from Book" )
111+
.restrict( unrestricted() )
112+
.createQuery( session )
104113
.getResultList() );
105114
assertEquals( 2, allBooks.size() );
106115
List<Book> noBooks = scope.fromSession( session ->
107-
session.createSelectionQuery( "from Book", Book.class)
108-
.addRestriction( unrestricted().negated() )
116+
SelectionSpecification.create( Book.class, "from Book" )
117+
.restrict( unrestricted().negated() )
118+
.createQuery( session )
109119
.getResultList() );
110120
assertEquals( 0, noBooks.size() );
111121
List<Book> books1 = scope.fromSession( session ->
112-
session.createSelectionQuery( "from Book", Book.class)
113-
.addRestriction( endsWith(title, "Hibernate") )
122+
SelectionSpecification.create( Book.class, "from Book" )
123+
.restrict( endsWith(title, "Hibernate") )
124+
.createQuery( session )
114125
.getResultList() );
115126
assertEquals( 1, books1.size() );
116127
List<Book> books2 = scope.fromSession( session ->
117-
session.createSelectionQuery( "from Book", Book.class)
118-
.addRestriction( like(title, "*Hibernat?", false, '?', '*') )
128+
SelectionSpecification.create( Book.class, "from Book" )
129+
.restrict( like(title, "*Hibernat?", false, '?', '*') )
130+
.createQuery( session )
119131
.getResultList() );
120132
assertEquals( 1, books2.size() );
121133
List<Book> books3 = scope.fromSession( session ->
122-
session.createSelectionQuery( "from Book", Book.class)
123-
.addRestriction( contains(title, "Hibernate") )
134+
SelectionSpecification.create( Book.class, "from Book" )
135+
.restrict( contains(title, "Hibernate") )
136+
.createQuery( session )
124137
.getResultList() );
125138
assertEquals( 2, books3.size() );
126139
List<Book> booksByTitleAndIsbn = scope.fromSession( session ->
127-
session.createSelectionQuery( "from Book", Book.class)
128-
.addRestriction( all( contains(title, "Hibernate"),
140+
SelectionSpecification.create( Book.class, "from Book" )
141+
.restrict( all( contains(title, "Hibernate"),
129142
equal( isbn, "9781932394153" ) ) )
143+
.createQuery( session )
130144
.getResultList() );
131145
assertEquals( 1, booksByTitleAndIsbn.size() );
132146
List<Book> booksByTitleOrIsbn = scope.fromSession( session ->
133-
session.createSelectionQuery( "from Book", Book.class)
134-
.addRestriction( any( contains(title, "Hibernate"),
147+
SelectionSpecification.create( Book.class, "from Book" )
148+
.restrict( any( contains(title, "Hibernate"),
135149
equal( isbn, "9781932394153" ) ) )
150+
.createQuery( session )
136151
.getResultList() );
137152
assertEquals( 2, booksByTitleOrIsbn.size() );
138153
List<Book> booksByIsbn1 = scope.fromSession( session ->
139-
session.createSelectionQuery( "from Book", Book.class)
140-
.addRestriction( in( isbn, "9781932394153", "9781617290459", "XYZ" ) )
154+
SelectionSpecification.create( Book.class, "from Book" )
155+
.restrict( in( isbn, "9781932394153", "9781617290459", "XYZ" ) )
156+
.createQuery( session )
141157
.getResultList() );
142158
assertEquals( 2, booksByIsbn1.size() );
143159
List<Book> booksByIsbn2 = scope.fromSession( session ->
144-
session.createSelectionQuery( "from Book", Book.class)
145-
.addRestriction( in( isbn, List.of("9781617290459", "XYZ", "ABC") ) )
160+
SelectionSpecification.create( Book.class, "from Book" )
161+
.restrict( in( isbn, List.of("9781617290459", "XYZ", "ABC") ) )
162+
.createQuery( session )
146163
.getResultList() );
147164
assertEquals( 1, booksByIsbn2.size() );
148165
}
@@ -174,44 +191,51 @@ void testPath(SessionFactoryScope scope) {
174191
var version = (SingularAttribute<? super Publisher, Integer>) pubType.findSingularAttribute("version");
175192

176193
scope.fromSession( session ->
177-
session.createSelectionQuery( "from Book", Book.class)
178-
.addRestriction( from(Book.class).equalTo( session.find(Book.class, "9781932394153") ) )
194+
SelectionSpecification.create( Book.class, "from Book" )
195+
.restrict( from(Book.class).equalTo( session.find(Book.class, "9781932394153") ) )
196+
.createQuery( session )
179197
.getSingleResult() );
180198

181199
List<Book> booksInIsbn = scope.fromSession( session ->
182-
session.createSelectionQuery( "from Book", Book.class)
183-
.addRestriction( from(Book.class).to(isbn).in( List.of("9781932394153", "9781617290459") ) )
200+
SelectionSpecification.create( Book.class, "from Book" )
201+
.restrict( from(Book.class).to(isbn).in( List.of("9781932394153", "9781617290459") ) )
202+
.createQuery( session )
184203
.setOrder( desc( isbn ) )
185204
.getResultList() );
186205
assertEquals( 2, booksInIsbn.size() );
187206
List<Book> booksWithPub = scope.fromSession( session ->
188-
session.createSelectionQuery( "from Book", Book.class)
189-
.addRestriction( from(Book.class).to(publisher).to(name).equalTo("Manning") )
207+
SelectionSpecification.create( Book.class, "from Book" )
208+
.restrict( from(Book.class).to(publisher).to(name).equalTo("Manning") )
209+
.createQuery( session )
190210
.setOrder( desc( title ) )
191211
.getResultList() );
192212
assertEquals( 2, booksWithPub.size() );
193213
List<Book> noBookWithPub = scope.fromSession( session ->
194-
session.createSelectionQuery( "from Book", Book.class)
195-
.addRestriction( from(Book.class).to(publisher).to(name).notEqualTo("Manning") )
214+
SelectionSpecification.create( Book.class, "from Book" )
215+
.restrict( from(Book.class).to(publisher).to(name).notEqualTo("Manning") )
216+
.createQuery( session )
196217
.setOrder( desc( title ) )
197218
.getResultList() );
198219
assertEquals( 0, noBookWithPub.size() );
199220
List<Book> books = scope.fromSession( session ->
200-
session.createSelectionQuery( "from Book", Book.class)
201-
.addRestriction( from(Book.class).to(title).restrict( containing("hibernate", false) ) )
221+
SelectionSpecification.create( Book.class, "from Book" )
222+
.restrict( from(Book.class).to(title).restrict( containing("hibernate", false) ) )
223+
.createQuery( session )
202224
.setOrder( desc( title ) )
203225
.getResultList() );
204226
assertEquals( 2, books.size() );
205227
List<Book> booksWithPubVersion = scope.fromSession( session ->
206-
session.createSelectionQuery( "from Book", Book.class)
207-
.addRestriction( from(Book.class).to(publisher).to(version).restrict( greaterThan(5) ) )
228+
SelectionSpecification.create( Book.class, "from Book" )
229+
.restrict( from(Book.class).to(publisher).to(version).restrict( greaterThan(5) ) )
230+
.createQuery( session )
208231
.getResultList() );
209232
assertEquals( 0, booksWithPubVersion.size() );
210233
List<Book> unsafeTest = scope.fromSession( session ->
211-
session.createSelectionQuery( "from Book", Book.class)
212-
.addRestriction( from(Book.class)
234+
SelectionSpecification.create( Book.class, "from Book" )
235+
.restrict( from(Book.class)
213236
.to("publisher", Publisher.class)
214237
.to("name", String.class).equalTo("Manning") )
238+
.createQuery( session )
215239
.getResultList() );
216240
assertEquals( 2, unsafeTest.size() );
217241
}

0 commit comments

Comments
 (0)