|
16 | 16 |
|
17 | 17 | import java.util.List;
|
18 | 18 |
|
| 19 | +import org.hibernate.query.programmatic.SelectionSpecification; |
19 | 20 | import static org.hibernate.query.Order.asc;
|
20 | 21 | import static org.hibernate.query.Order.desc;
|
21 | 22 | import static org.hibernate.query.restriction.Path.from;
|
@@ -57,92 +58,108 @@ void test(SessionFactoryScope scope) {
|
57 | 58 | var pages = (SingularAttribute<? super Book, Integer>) bookType.findSingularAttribute("pages");
|
58 | 59 |
|
59 | 60 | 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 ) |
62 | 64 | .getSingleResult() );
|
63 | 65 | assertEquals( "Hibernate in Action", book.title );
|
64 | 66 | 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 ) |
67 | 70 | .setOrder( desc( title ) )
|
68 | 71 | .getResultList() );
|
69 | 72 | assertEquals( 2, books.size() );
|
70 | 73 | assertEquals( "Java Persistence with Hibernate", books.get(0).title );
|
71 | 74 | assertEquals( "Hibernate in Action", books.get(1).title );
|
72 | 75 | 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 ) |
75 | 79 | .setOrder( asc( title ) )
|
76 | 80 | .getResultList() );
|
77 | 81 | assertEquals( 2, booksByIsbn.size() );
|
78 | 82 | assertEquals( "Hibernate in Action", booksByIsbn.get(0).title );
|
79 | 83 | assertEquals( "Java Persistence with Hibernate", booksByIsbn.get(1).title );
|
80 | 84 | 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 ) |
83 | 88 | .getResultList() );
|
84 | 89 | assertEquals( 1, booksByPages.size() );
|
85 | 90 | 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 ) |
88 | 94 | .getResultList() );
|
89 | 95 | assertEquals( 1, booksByPageRange.size() );
|
90 | 96 | 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 ) |
93 | 100 | .getSingleResultOrNull() );
|
94 | 101 | assertEquals( "9781932394153", bookByTitle.isbn );
|
95 | 102 | 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", |
98 | 105 | singleCaseInsensitiveValue("hibernate in action") ) )
|
| 106 | + .createQuery( session ) |
99 | 107 | .getSingleResultOrNull() );
|
100 | 108 | assertEquals( "9781932394153", bookByTitleUnsafe.isbn );
|
101 | 109 | 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 ) |
104 | 113 | .getResultList() );
|
105 | 114 | assertEquals( 2, allBooks.size() );
|
106 | 115 | 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 ) |
109 | 119 | .getResultList() );
|
110 | 120 | assertEquals( 0, noBooks.size() );
|
111 | 121 | 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 ) |
114 | 125 | .getResultList() );
|
115 | 126 | assertEquals( 1, books1.size() );
|
116 | 127 | 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 ) |
119 | 131 | .getResultList() );
|
120 | 132 | assertEquals( 1, books2.size() );
|
121 | 133 | 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 ) |
124 | 137 | .getResultList() );
|
125 | 138 | assertEquals( 2, books3.size() );
|
126 | 139 | 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"), |
129 | 142 | equal( isbn, "9781932394153" ) ) )
|
| 143 | + .createQuery( session ) |
130 | 144 | .getResultList() );
|
131 | 145 | assertEquals( 1, booksByTitleAndIsbn.size() );
|
132 | 146 | 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"), |
135 | 149 | equal( isbn, "9781932394153" ) ) )
|
| 150 | + .createQuery( session ) |
136 | 151 | .getResultList() );
|
137 | 152 | assertEquals( 2, booksByTitleOrIsbn.size() );
|
138 | 153 | 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 ) |
141 | 157 | .getResultList() );
|
142 | 158 | assertEquals( 2, booksByIsbn1.size() );
|
143 | 159 | 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 ) |
146 | 163 | .getResultList() );
|
147 | 164 | assertEquals( 1, booksByIsbn2.size() );
|
148 | 165 | }
|
@@ -174,44 +191,51 @@ void testPath(SessionFactoryScope scope) {
|
174 | 191 | var version = (SingularAttribute<? super Publisher, Integer>) pubType.findSingularAttribute("version");
|
175 | 192 |
|
176 | 193 | 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 ) |
179 | 197 | .getSingleResult() );
|
180 | 198 |
|
181 | 199 | 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 ) |
184 | 203 | .setOrder( desc( isbn ) )
|
185 | 204 | .getResultList() );
|
186 | 205 | assertEquals( 2, booksInIsbn.size() );
|
187 | 206 | 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 ) |
190 | 210 | .setOrder( desc( title ) )
|
191 | 211 | .getResultList() );
|
192 | 212 | assertEquals( 2, booksWithPub.size() );
|
193 | 213 | 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 ) |
196 | 217 | .setOrder( desc( title ) )
|
197 | 218 | .getResultList() );
|
198 | 219 | assertEquals( 0, noBookWithPub.size() );
|
199 | 220 | 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 ) |
202 | 224 | .setOrder( desc( title ) )
|
203 | 225 | .getResultList() );
|
204 | 226 | assertEquals( 2, books.size() );
|
205 | 227 | 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 ) |
208 | 231 | .getResultList() );
|
209 | 232 | assertEquals( 0, booksWithPubVersion.size() );
|
210 | 233 | 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) |
213 | 236 | .to("publisher", Publisher.class)
|
214 | 237 | .to("name", String.class).equalTo("Manning") )
|
| 238 | + .createQuery( session ) |
215 | 239 | .getResultList() );
|
216 | 240 | assertEquals( 2, unsafeTest.size() );
|
217 | 241 | }
|
|
0 commit comments