|
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