Skip to content

Commit c9057e6

Browse files
committed
[#2104] Create QueryProducer interface for the sessions
1 parent 6cc86b1 commit c9057e6

File tree

9 files changed

+1157
-1492
lines changed

9 files changed

+1157
-1492
lines changed

hibernate-reactive-core/src/main/java/org/hibernate/reactive/mutiny/Mutiny.java

+507-695
Large diffs are not rendered by default.

hibernate-reactive-core/src/main/java/org/hibernate/reactive/mutiny/impl/MutinySessionImpl.java

+11-1
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import jakarta.persistence.LockModeType;
1414
import jakarta.persistence.PersistenceException;
1515
import jakarta.persistence.TypedQueryReference;
16+
import jakarta.persistence.criteria.CriteriaBuilder;
1617
import jakarta.persistence.criteria.CriteriaDelete;
1718
import jakarta.persistence.criteria.CriteriaQuery;
1819
import jakarta.persistence.criteria.CriteriaUpdate;
@@ -48,7 +49,6 @@
4849

4950
import static org.hibernate.reactive.util.impl.CompletionStages.applyToAll;
5051

51-
5252
/**
5353
* Implements the {@link Mutiny.Session} API. This delegating class is
5454
* needed to avoid name clashes when implementing both
@@ -86,6 +86,11 @@ public <E, T> Uni<T> fetch(E entity, Attribute<E, T> field) {
8686
return uni( () -> delegate.reactiveFetch( entity, field ) );
8787
}
8888

89+
@Override
90+
public Object getIdentifier(Object entity) {
91+
return delegate.getIdentifier( entity );
92+
}
93+
8994
@Override
9095
public <T> Uni<T> unproxy(T association) {
9196
return uni( () -> delegate.reactiveFetch( association, true ) );
@@ -578,6 +583,11 @@ public Mutiny.SessionFactory getFactory() {
578583
return factory;
579584
}
580585

586+
@Override
587+
public CriteriaBuilder getCriteriaBuilder() {
588+
return getFactory().getCriteriaBuilder();
589+
}
590+
581591
@Override
582592
public <T> ResultSetMapping<T> getResultSetMapping(Class<T> resultType, String mappingName) {
583593
return delegate.getResultSetMapping( resultType, mappingName );

hibernate-reactive-core/src/main/java/org/hibernate/reactive/mutiny/impl/MutinyStatelessSessionImpl.java

+52-24
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,15 @@
88
import io.smallrye.mutiny.Uni;
99
import jakarta.persistence.EntityGraph;
1010
import jakarta.persistence.TypedQueryReference;
11+
import jakarta.persistence.criteria.CriteriaBuilder;
1112
import jakarta.persistence.criteria.CriteriaDelete;
1213
import jakarta.persistence.criteria.CriteriaQuery;
1314
import jakarta.persistence.criteria.CriteriaUpdate;
15+
1416
import org.hibernate.LockMode;
1517
import org.hibernate.graph.spi.RootGraphImplementor;
18+
import org.hibernate.query.criteria.JpaCriteriaInsert;
19+
import org.hibernate.reactive.common.AffectedEntities;
1620
import org.hibernate.reactive.common.ResultSetMapping;
1721
import org.hibernate.reactive.mutiny.Mutiny;
1822
import org.hibernate.reactive.mutiny.Mutiny.Query;
@@ -21,13 +25,13 @@
2125
import org.hibernate.reactive.query.ReactiveQuery;
2226
import org.hibernate.reactive.session.ReactiveStatelessSession;
2327

28+
import jakarta.persistence.metamodel.Attribute;
2429
import java.util.List;
2530
import java.util.concurrent.CompletableFuture;
2631
import java.util.concurrent.CompletionStage;
2732
import java.util.function.Function;
2833
import java.util.function.Supplier;
2934

30-
3135
/**
3236
* Implements the {@link Mutiny.StatelessSession} API. This delegating
3337
* class is needed to avoid name clashes when implementing both
@@ -47,7 +51,6 @@ public ReactiveConnection getReactiveConnection() {
4751
return delegate.getReactiveConnection();
4852
}
4953

50-
5154
<T> Uni<T> uni(Supplier<CompletionStage<T>> stageSupplier) {
5255
return factory.uni( stageSupplier );
5356
}
@@ -91,12 +94,47 @@ public <R> SelectionQuery<R> createQuery(String queryString, Class<R> resultType
9194

9295
@Override
9396
public <R> SelectionQuery<R> createSelectionQuery(String queryString, Class<R> resultType) {
94-
return new MutinySelectionQueryImpl<>( delegate.createReactiveSelectionQuery( queryString, resultType), factory );
97+
return new MutinySelectionQueryImpl<>( delegate.createReactiveSelectionQuery( queryString, resultType ), factory );
9598
}
9699

97100
@Override
98101
public Mutiny.MutationQuery createMutationQuery(String queryString) {
99-
return new MutinyMutationQueryImpl<>( delegate.createReactiveMutationQuery( queryString), factory );
102+
return new MutinyMutationQueryImpl<>( delegate.createReactiveMutationQuery( queryString ), factory );
103+
}
104+
105+
@Override
106+
public Mutiny.MutationQuery createMutationQuery(CriteriaUpdate<?> updateQuery) {
107+
return new MutinyMutationQueryImpl<>( delegate.createReactiveMutationQuery( updateQuery ), factory );
108+
}
109+
110+
@Override
111+
public Mutiny.MutationQuery createMutationQuery(CriteriaDelete<?> deleteQuery) {
112+
return null;
113+
}
114+
115+
@Override
116+
public Mutiny.MutationQuery createMutationQuery(JpaCriteriaInsert<?> insert) {
117+
return null;
118+
}
119+
120+
@Override
121+
public <R> Query<R> createNativeQuery(String queryString, AffectedEntities affectedEntities) {
122+
return null;
123+
}
124+
125+
@Override
126+
public <R> SelectionQuery<R> createNativeQuery(String queryString, Class<R> resultType, AffectedEntities affectedEntities) {
127+
return null;
128+
}
129+
130+
@Override
131+
public <R> SelectionQuery<R> createNativeQuery(String queryString, ResultSetMapping<R> resultSetMapping, AffectedEntities affectedEntities) {
132+
return null;
133+
}
134+
135+
@Override
136+
public <E, T> Uni<T> fetch(E entity, Attribute<E, T> field) {
137+
return null;
100138
}
101139

102140
@Override
@@ -259,26 +297,6 @@ public Object getIdentifier(Object entity) {
259297
return delegate.getIdentifier(entity);
260298
}
261299

262-
// @Override
263-
// public <T> ResultSetMapping<T> getResultSetMapping(Class<T> resultType, String mappingName) {
264-
// return delegate.getResultSetMapping( resultType, mappingName );
265-
// }
266-
//
267-
// @Override
268-
// public <T> EntityGraph<T> getEntityGraph(Class<T> entity, String name) {
269-
// return delegate.getEntityGraph( entity, name );
270-
// }
271-
//
272-
// @Override
273-
// public <T> EntityGraph<T> createEntityGraph(Class<T> entity) {
274-
// return delegate.createEntityGraph( entity );
275-
// }
276-
//
277-
// @Override
278-
// public <T> EntityGraph<T> createEntityGraph(Class<T> entity, String name) {
279-
// return delegate.createEntityGraph( entity, name );
280-
// }
281-
282300
@Override
283301
public <T> Uni<T> withTransaction(Function<Mutiny.Transaction, Uni<T>> work) {
284302
return currentTransaction == null ? new Transaction<T>().execute( work ) : work.apply( currentTransaction );
@@ -359,6 +377,11 @@ public MutinySessionFactoryImpl getFactory() {
359377
return factory;
360378
}
361379

380+
@Override
381+
public CriteriaBuilder getCriteriaBuilder() {
382+
return getFactory().getCriteriaBuilder();
383+
}
384+
362385
@Override
363386
public <T> ResultSetMapping<T> getResultSetMapping(Class<T> resultType, String mappingName) {
364387
return delegate.getResultSetMapping( resultType, mappingName );
@@ -378,4 +401,9 @@ public <T> EntityGraph<T> createEntityGraph(Class<T> rootType) {
378401
public <T> EntityGraph<T> createEntityGraph(Class<T> rootType, String graphName) {
379402
return delegate.createEntityGraph( rootType, graphName );
380403
}
404+
405+
@Override
406+
public <T> Uni<T> unproxy(T association) {
407+
return uni( () -> delegate.reactiveFetch( association, true ) );
408+
}
381409
}

hibernate-reactive-core/src/main/java/org/hibernate/reactive/session/ReactiveQueryProducer.java

+5-3
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,6 @@
55
*/
66
package org.hibernate.reactive.session;
77

8-
import jakarta.persistence.TypedQueryReference;
9-
import java.util.concurrent.CompletionStage;
10-
118
import org.hibernate.Incubating;
129
import org.hibernate.dialect.Dialect;
1310
import org.hibernate.engine.spi.SessionFactoryImplementor;
@@ -22,9 +19,12 @@
2219
import org.hibernate.reactive.query.ReactiveSelectionQuery;
2320

2421
import jakarta.persistence.EntityGraph;
22+
import jakarta.persistence.TypedQueryReference;
2523
import jakarta.persistence.criteria.CriteriaDelete;
2624
import jakarta.persistence.criteria.CriteriaQuery;
2725
import jakarta.persistence.criteria.CriteriaUpdate;
26+
import jakarta.persistence.metamodel.Attribute;
27+
import java.util.concurrent.CompletionStage;
2828

2929

3030
/**
@@ -44,6 +44,8 @@ public interface ReactiveQueryProducer extends ReactiveConnectionSupplier {
4444

4545
<T> CompletionStage<T> reactiveFetch(T association, boolean unproxy);
4646

47+
<E,T> CompletionStage<T> reactiveFetch(E entity, Attribute<E,T> field);
48+
4749
CompletionStage<Object> reactiveInternalLoad(String entityName, Object id, boolean eager, boolean nullable);
4850

4951
<T> EntityGraph<T> createEntityGraph(Class<T> entity);

hibernate-reactive-core/src/main/java/org/hibernate/reactive/session/ReactiveSession.java

-3
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@
2828
import org.hibernate.reactive.engine.spi.ReactiveSharedSessionContractImplementor;
2929

3030
import jakarta.persistence.EntityGraph;
31-
import jakarta.persistence.metamodel.Attribute;
3231

3332
/**
3433
* A contract with the Hibernate session backing the user-visible
@@ -47,8 +46,6 @@ public interface ReactiveSession extends ReactiveQueryProducer, ReactiveSharedSe
4746

4847
SessionImplementor getSharedContract();
4948

50-
<E,T> CompletionStage<T> reactiveFetch(E entity, Attribute<E,T> field);
51-
5249
CompletionStage<Void> reactivePersist(Object entity);
5350

5451
CompletionStage<Void> reactivePersist(String entityName, Object object);

hibernate-reactive-core/src/main/java/org/hibernate/reactive/session/impl/ReactiveStatelessSessionImpl.java

+7
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@
8080
import jakarta.persistence.criteria.CriteriaDelete;
8181
import jakarta.persistence.criteria.CriteriaQuery;
8282
import jakarta.persistence.criteria.CriteriaUpdate;
83+
import jakarta.persistence.metamodel.Attribute;
8384
import java.util.List;
8485
import java.util.concurrent.CompletableFuture;
8586
import java.util.concurrent.CompletionStage;
@@ -840,6 +841,12 @@ else if ( association instanceof PersistentCollection<?> collection && !collecti
840841
return completedFuture( association );
841842
}
842843

844+
@Override
845+
public <E, T> CompletionStage<T> reactiveFetch(E entity, Attribute<E, T> field) {
846+
return getEntityPersister( null, entity )
847+
.reactiveInitializeLazyProperty( field, entity, this );
848+
}
849+
843850
private <T> CompletionStage<T> fetchUninitialized(
844851
T association,
845852
boolean unproxy,

0 commit comments

Comments
 (0)