|
5 | 5 | */
|
6 | 6 | package org.hibernate.reactive.session.impl;
|
7 | 7 |
|
| 8 | +import java.util.ArrayList; |
| 9 | +import java.util.List; |
8 | 10 | import java.util.concurrent.CompletableFuture;
|
9 | 11 | import java.util.concurrent.CompletionStage;
|
10 | 12 | import java.util.function.Supplier;
|
|
46 | 48 | import org.hibernate.proxy.LazyInitializer;
|
47 | 49 | import org.hibernate.query.IllegalMutationQueryException;
|
48 | 50 | import org.hibernate.query.criteria.JpaCriteriaInsert;
|
| 51 | +import org.hibernate.query.criteria.JpaCriteriaQuery; |
| 52 | +import org.hibernate.query.criteria.JpaRoot; |
49 | 53 | import org.hibernate.query.hql.spi.SqmQueryImplementor;
|
50 | 54 | import org.hibernate.query.named.NamedResultSetMappingMemento;
|
51 | 55 | import org.hibernate.query.spi.HqlInterpretation;
|
@@ -204,17 +208,46 @@ public void checkTransactionNeededForUpdateOperation(String exceptionMessage) {
|
204 | 208 | }
|
205 | 209 |
|
206 | 210 | @Override
|
207 |
| - public <T> CompletionStage<T> reactiveGet(Class<? extends T> entityClass, Object id) { |
| 211 | + public <T> CompletionStage<T> reactiveGet(Class<T> entityClass, Object id) { |
208 | 212 | return reactiveGet( entityClass.getName(), id, LockMode.NONE, null );
|
209 | 213 | }
|
210 | 214 |
|
| 215 | + @Override |
| 216 | + public <T> CompletionStage<List<T>> reactiveGet(Class<T> entityClass, Object... ids) { |
| 217 | + checkOpen(); |
| 218 | + for (Object id : ids) { |
| 219 | + if ( id == null ) { |
| 220 | + throw new IllegalArgumentException("Null id"); |
| 221 | + } |
| 222 | + } |
| 223 | + |
| 224 | + final EntityPersister persister = getEntityPersister( entityClass.getName() ); |
| 225 | + |
| 226 | + final JpaCriteriaQuery<T> query = getCriteriaBuilder().createQuery(entityClass); |
| 227 | + final JpaRoot<T> from = query.from(entityClass); |
| 228 | + query.where( from.get( persister.getIdentifierPropertyName() ).in(ids) ); |
| 229 | + return createReactiveQuery(query).getReactiveResultList() |
| 230 | + .thenApply( resultList -> { |
| 231 | + final List<Object> idList = new ArrayList<>( resultList.size() ); |
| 232 | + for (T entity : resultList) { |
| 233 | + idList.add( persister.getIdentifier(entity, this) ); |
| 234 | + } |
| 235 | + final List<T> list = new ArrayList<>( ids.length ); |
| 236 | + for (Object id : ids) { |
| 237 | + final int pos = idList.indexOf(id); |
| 238 | + list.add( pos < 0 ? null : resultList.get(pos) ); |
| 239 | + } |
| 240 | + return list; |
| 241 | + }); |
| 242 | + } |
| 243 | + |
211 | 244 | @Override
|
212 | 245 | public <T> CompletionStage<T> reactiveGet(String entityName, Object id) {
|
213 | 246 | return reactiveGet( entityName, id, LockMode.NONE, null );
|
214 | 247 | }
|
215 | 248 |
|
216 | 249 | @Override
|
217 |
| - public <T> CompletionStage<T> reactiveGet(Class<? extends T> entityClass, Object id, LockMode lockMode, EntityGraph<T> fetchGraph) { |
| 250 | + public <T> CompletionStage<T> reactiveGet(Class<T> entityClass, Object id, LockMode lockMode, EntityGraph<T> fetchGraph) { |
218 | 251 | return reactiveGet( entityClass.getName(), id, LockMode.NONE, fetchGraph );
|
219 | 252 | }
|
220 | 253 |
|
|
0 commit comments