Skip to content

Commit 9c17681

Browse files
committed
[hibernate#1710] Add support for org.hibernate.query.Page
1 parent ef821a1 commit 9c17681

File tree

6 files changed

+113
-76
lines changed

6 files changed

+113
-76
lines changed

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

+14-14
Original file line numberDiff line numberDiff line change
@@ -6,24 +6,15 @@
66
package org.hibernate.reactive.mutiny;
77

88
import io.smallrye.mutiny.Uni;
9-
import jakarta.persistence.CacheRetrieveMode;
10-
import jakarta.persistence.CacheStoreMode;
11-
import jakarta.persistence.EntityGraph;
12-
import jakarta.persistence.FlushModeType;
13-
import jakarta.persistence.LockModeType;
14-
import jakarta.persistence.Parameter;
9+
import jakarta.persistence.*;
1510
import jakarta.persistence.criteria.CriteriaBuilder;
1611
import jakarta.persistence.criteria.CriteriaDelete;
1712
import jakarta.persistence.criteria.CriteriaQuery;
1813
import jakarta.persistence.criteria.CriteriaUpdate;
1914
import jakarta.persistence.metamodel.Attribute;
2015
import jakarta.persistence.metamodel.Metamodel;
2116
import org.hibernate.Cache;
22-
import org.hibernate.CacheMode;
23-
import org.hibernate.Filter;
24-
import org.hibernate.FlushMode;
25-
import org.hibernate.Incubating;
26-
import org.hibernate.LockMode;
17+
import org.hibernate.*;
2718
import org.hibernate.bytecode.enhance.spi.interceptor.EnhancementAsProxyLazinessInterceptor;
2819
import org.hibernate.collection.spi.AbstractPersistentCollection;
2920
import org.hibernate.collection.spi.PersistentCollection;
@@ -32,6 +23,7 @@
3223
import org.hibernate.engine.spi.SharedSessionContractImplementor;
3324
import org.hibernate.jpa.internal.util.FlushModeTypeHelper;
3425
import org.hibernate.proxy.HibernateProxy;
26+
import org.hibernate.query.Page;
3527
import org.hibernate.reactive.common.AffectedEntities;
3628
import org.hibernate.reactive.common.Identifier;
3729
import org.hibernate.reactive.common.ResultSetMapping;
@@ -48,9 +40,7 @@
4840
import static org.hibernate.engine.internal.ManagedTypeHelper.asPersistentAttributeInterceptable;
4941
import static org.hibernate.engine.internal.ManagedTypeHelper.isPersistentAttributeInterceptable;
5042
import static org.hibernate.internal.util.LockModeConverter.convertToLockMode;
51-
import static org.hibernate.jpa.internal.util.CacheModeHelper.interpretCacheMode;
52-
import static org.hibernate.jpa.internal.util.CacheModeHelper.interpretCacheRetrieveMode;
53-
import static org.hibernate.jpa.internal.util.CacheModeHelper.interpretCacheStoreMode;
43+
import static org.hibernate.jpa.internal.util.CacheModeHelper.*;
5444

5545
/**
5646
* An API for Hibernate Reactive where non-blocking operations are
@@ -141,6 +131,16 @@ interface SelectionQuery<R> extends AbstractQuery {
141131
*/
142132
SelectionQuery<R> setFirstResult(int firstResult);
143133

134+
/**
135+
* Set the {@linkplain Page page} of results to return.
136+
*
137+
* @see Page
138+
*
139+
* @since 2.1
140+
*/
141+
@Incubating
142+
SelectionQuery<R> setPage(Page page);
143+
144144
/**
145145
* @return the maximum number results, or {@link Integer#MAX_VALUE}
146146
* if not set

Diff for: hibernate-reactive-core/src/main/java/org/hibernate/reactive/mutiny/impl/MutinyQueryImpl.java

+20-10
Original file line numberDiff line numberDiff line change
@@ -5,24 +5,27 @@
55
*/
66
package org.hibernate.reactive.mutiny.impl;
77

8-
import io.smallrye.mutiny.Uni;
9-
import jakarta.persistence.CacheRetrieveMode;
10-
import jakarta.persistence.CacheStoreMode;
11-
import jakarta.persistence.EntityGraph;
12-
import jakarta.persistence.FlushModeType;
13-
import jakarta.persistence.LockModeType;
14-
import jakarta.persistence.Parameter;
8+
import java.util.List;
9+
import java.util.concurrent.CompletionStage;
10+
import java.util.function.Supplier;
11+
1512
import org.hibernate.CacheMode;
1613
import org.hibernate.FlushMode;
1714
import org.hibernate.LockMode;
1815
import org.hibernate.graph.GraphSemantic;
1916
import org.hibernate.graph.spi.RootGraphImplementor;
17+
import org.hibernate.query.Page;
18+
import org.hibernate.reactive.mutiny.Mutiny;
2019
import org.hibernate.reactive.mutiny.Mutiny.Query;
2120
import org.hibernate.reactive.query.ReactiveQuery;
2221

23-
import java.util.List;
24-
import java.util.concurrent.CompletionStage;
25-
import java.util.function.Supplier;
22+
import io.smallrye.mutiny.Uni;
23+
import jakarta.persistence.CacheRetrieveMode;
24+
import jakarta.persistence.CacheStoreMode;
25+
import jakarta.persistence.EntityGraph;
26+
import jakarta.persistence.FlushModeType;
27+
import jakarta.persistence.LockModeType;
28+
import jakarta.persistence.Parameter;
2629

2730
public class MutinyQueryImpl<R> implements Query<R> {
2831

@@ -121,6 +124,13 @@ public Query<R> setFirstResult(int startPosition) {
121124
return this;
122125
}
123126

127+
@Override
128+
public Mutiny.SelectionQuery<R> setPage(Page page) {
129+
setFirstResult( page.getFirstResult() );
130+
setMaxResults( page.getMaxResults() );
131+
return this;
132+
}
133+
124134
@Override
125135
public CacheMode getCacheMode() {
126136
return delegate.getCacheMode();

Diff for: hibernate-reactive-core/src/main/java/org/hibernate/reactive/mutiny/impl/MutinySelectionQueryImpl.java

+20-10
Original file line numberDiff line numberDiff line change
@@ -5,24 +5,27 @@
55
*/
66
package org.hibernate.reactive.mutiny.impl;
77

8-
import io.smallrye.mutiny.Uni;
9-
import jakarta.persistence.CacheRetrieveMode;
10-
import jakarta.persistence.CacheStoreMode;
11-
import jakarta.persistence.EntityGraph;
12-
import jakarta.persistence.FlushModeType;
13-
import jakarta.persistence.LockModeType;
14-
import jakarta.persistence.Parameter;
8+
import java.util.List;
9+
import java.util.concurrent.CompletionStage;
10+
import java.util.function.Supplier;
11+
1512
import org.hibernate.CacheMode;
1613
import org.hibernate.FlushMode;
1714
import org.hibernate.LockMode;
1815
import org.hibernate.graph.GraphSemantic;
1916
import org.hibernate.graph.spi.RootGraphImplementor;
17+
import org.hibernate.query.Page;
18+
import org.hibernate.reactive.mutiny.Mutiny;
2019
import org.hibernate.reactive.mutiny.Mutiny.SelectionQuery;
2120
import org.hibernate.reactive.query.ReactiveSelectionQuery;
2221

23-
import java.util.List;
24-
import java.util.concurrent.CompletionStage;
25-
import java.util.function.Supplier;
22+
import io.smallrye.mutiny.Uni;
23+
import jakarta.persistence.CacheRetrieveMode;
24+
import jakarta.persistence.CacheStoreMode;
25+
import jakarta.persistence.EntityGraph;
26+
import jakarta.persistence.FlushModeType;
27+
import jakarta.persistence.LockModeType;
28+
import jakarta.persistence.Parameter;
2629

2730
public class MutinySelectionQueryImpl<R> implements SelectionQuery<R> {
2831
private final MutinySessionFactoryImpl factory;
@@ -114,6 +117,13 @@ public SelectionQuery<R> setFirstResult(int startPosition) {
114117
return this;
115118
}
116119

120+
@Override
121+
public Mutiny.SelectionQuery<R> setPage(Page page) {
122+
setMaxResults( page.getMaxResults() );
123+
setFirstResult( page.getFirstResult() );
124+
return this;
125+
}
126+
117127
@Override
118128
public CacheMode getCacheMode() {
119129
return delegate.getCacheMode();

Diff for: hibernate-reactive-core/src/main/java/org/hibernate/reactive/stage/Stage.java

+25-26
Original file line numberDiff line numberDiff line change
@@ -5,18 +5,15 @@
55
*/
66
package org.hibernate.reactive.stage;
77

8-
import java.lang.invoke.MethodHandles;
9-
import java.util.List;
10-
import java.util.concurrent.CompletionStage;
11-
import java.util.function.BiFunction;
12-
import java.util.function.Function;
13-
8+
import jakarta.persistence.*;
9+
import jakarta.persistence.criteria.CriteriaBuilder;
10+
import jakarta.persistence.criteria.CriteriaDelete;
11+
import jakarta.persistence.criteria.CriteriaQuery;
12+
import jakarta.persistence.criteria.CriteriaUpdate;
13+
import jakarta.persistence.metamodel.Attribute;
14+
import jakarta.persistence.metamodel.Metamodel;
1415
import org.hibernate.Cache;
15-
import org.hibernate.CacheMode;
16-
import org.hibernate.Filter;
17-
import org.hibernate.FlushMode;
18-
import org.hibernate.Incubating;
19-
import org.hibernate.LockMode;
16+
import org.hibernate.*;
2017
import org.hibernate.bytecode.enhance.spi.interceptor.EnhancementAsProxyLazinessInterceptor;
2118
import org.hibernate.collection.spi.AbstractPersistentCollection;
2219
import org.hibernate.collection.spi.PersistentCollection;
@@ -25,6 +22,7 @@
2522
import org.hibernate.engine.spi.SharedSessionContractImplementor;
2623
import org.hibernate.jpa.internal.util.FlushModeTypeHelper;
2724
import org.hibernate.proxy.HibernateProxy;
25+
import org.hibernate.query.Page;
2826
import org.hibernate.reactive.common.AffectedEntities;
2927
import org.hibernate.reactive.common.Identifier;
3028
import org.hibernate.reactive.common.ResultSetMapping;
@@ -34,25 +32,16 @@
3432
import org.hibernate.reactive.util.impl.CompletionStages;
3533
import org.hibernate.stat.Statistics;
3634

37-
import jakarta.persistence.CacheRetrieveMode;
38-
import jakarta.persistence.CacheStoreMode;
39-
import jakarta.persistence.EntityGraph;
40-
import jakarta.persistence.FlushModeType;
41-
import jakarta.persistence.LockModeType;
42-
import jakarta.persistence.Parameter;
43-
import jakarta.persistence.criteria.CriteriaBuilder;
44-
import jakarta.persistence.criteria.CriteriaDelete;
45-
import jakarta.persistence.criteria.CriteriaQuery;
46-
import jakarta.persistence.criteria.CriteriaUpdate;
47-
import jakarta.persistence.metamodel.Attribute;
48-
import jakarta.persistence.metamodel.Metamodel;
35+
import java.lang.invoke.MethodHandles;
36+
import java.util.List;
37+
import java.util.concurrent.CompletionStage;
38+
import java.util.function.BiFunction;
39+
import java.util.function.Function;
4940

5041
import static org.hibernate.engine.internal.ManagedTypeHelper.asPersistentAttributeInterceptable;
5142
import static org.hibernate.engine.internal.ManagedTypeHelper.isPersistentAttributeInterceptable;
5243
import static org.hibernate.internal.util.LockModeConverter.convertToLockMode;
53-
import static org.hibernate.jpa.internal.util.CacheModeHelper.interpretCacheMode;
54-
import static org.hibernate.jpa.internal.util.CacheModeHelper.interpretCacheRetrieveMode;
55-
import static org.hibernate.jpa.internal.util.CacheModeHelper.interpretCacheStoreMode;
44+
import static org.hibernate.jpa.internal.util.CacheModeHelper.*;
5645

5746
/**
5847
* An API for Hibernate Reactive where non-blocking operations are
@@ -143,6 +132,16 @@ interface SelectionQuery<R> extends AbstractQuery {
143132
*/
144133
SelectionQuery<R> setFirstResult(int firstResult);
145134

135+
/**
136+
* Set the {@linkplain Page page} of results to return.
137+
*
138+
* @see Page
139+
*
140+
* @since 2.1
141+
*/
142+
@Incubating
143+
SelectionQuery<R> setPage(Page page);
144+
146145
/**
147146
* @return the maximum number results, or {@link Integer#MAX_VALUE}
148147
* if not set

Diff for: hibernate-reactive-core/src/main/java/org/hibernate/reactive/stage/impl/StageQueryImpl.java

+17-8
Original file line numberDiff line numberDiff line change
@@ -5,23 +5,25 @@
55
*/
66
package org.hibernate.reactive.stage.impl;
77

8-
import jakarta.persistence.CacheRetrieveMode;
9-
import jakarta.persistence.CacheStoreMode;
10-
import jakarta.persistence.EntityGraph;
11-
import jakarta.persistence.FlushModeType;
12-
import jakarta.persistence.LockModeType;
13-
import jakarta.persistence.Parameter;
8+
import java.util.List;
9+
import java.util.concurrent.CompletionStage;
10+
1411
import org.hibernate.CacheMode;
1512
import org.hibernate.FlushMode;
1613
import org.hibernate.LockMode;
1714
import org.hibernate.graph.GraphSemantic;
1815
import org.hibernate.graph.spi.RootGraphImplementor;
16+
import org.hibernate.query.Page;
1917
import org.hibernate.reactive.query.ReactiveQuery;
2018
import org.hibernate.reactive.stage.Stage;
2119
import org.hibernate.reactive.stage.Stage.Query;
2220

23-
import java.util.List;
24-
import java.util.concurrent.CompletionStage;
21+
import jakarta.persistence.CacheRetrieveMode;
22+
import jakarta.persistence.CacheStoreMode;
23+
import jakarta.persistence.EntityGraph;
24+
import jakarta.persistence.FlushModeType;
25+
import jakarta.persistence.LockModeType;
26+
import jakarta.persistence.Parameter;
2527

2628
public class StageQueryImpl<R> implements Query<R> {
2729
private final ReactiveQuery<R> delegate;
@@ -113,6 +115,13 @@ public Query<R> setFirstResult(int startPosition) {
113115
return this;
114116
}
115117

118+
@Override
119+
public Stage.SelectionQuery<R> setPage(Page page) {
120+
setFirstResult( page.getFirstResult() );
121+
setMaxResults( page.getMaxResults() );
122+
return this;
123+
}
124+
116125
@Override
117126
public CacheMode getCacheMode() {
118127
return delegate.getCacheMode();

Diff for: hibernate-reactive-core/src/main/java/org/hibernate/reactive/stage/impl/StageSelectionQueryImpl.java

+17-8
Original file line numberDiff line numberDiff line change
@@ -5,22 +5,24 @@
55
*/
66
package org.hibernate.reactive.stage.impl;
77

8-
import jakarta.persistence.CacheRetrieveMode;
9-
import jakarta.persistence.CacheStoreMode;
10-
import jakarta.persistence.EntityGraph;
11-
import jakarta.persistence.FlushModeType;
12-
import jakarta.persistence.LockModeType;
13-
import jakarta.persistence.Parameter;
8+
import java.util.List;
9+
import java.util.concurrent.CompletionStage;
10+
1411
import org.hibernate.CacheMode;
1512
import org.hibernate.FlushMode;
1613
import org.hibernate.LockMode;
1714
import org.hibernate.graph.GraphSemantic;
1815
import org.hibernate.graph.spi.RootGraphImplementor;
16+
import org.hibernate.query.Page;
1917
import org.hibernate.reactive.query.ReactiveSelectionQuery;
2018
import org.hibernate.reactive.stage.Stage.SelectionQuery;
2119

22-
import java.util.List;
23-
import java.util.concurrent.CompletionStage;
20+
import jakarta.persistence.CacheRetrieveMode;
21+
import jakarta.persistence.CacheStoreMode;
22+
import jakarta.persistence.EntityGraph;
23+
import jakarta.persistence.FlushModeType;
24+
import jakarta.persistence.LockModeType;
25+
import jakarta.persistence.Parameter;
2426

2527
public class StageSelectionQueryImpl<T> implements SelectionQuery<T> {
2628
private final ReactiveSelectionQuery<T> delegate;
@@ -112,6 +114,13 @@ public SelectionQuery<T> setFirstResult(int startPosition) {
112114
return this;
113115
}
114116

117+
@Override
118+
public SelectionQuery<T> setPage(Page page) {
119+
setMaxResults( page.getMaxResults() );
120+
setFirstResult( page.getFirstResult() );
121+
return this;
122+
}
123+
115124
@Override
116125
public CacheMode getCacheMode() {
117126
return delegate.getCacheMode();

0 commit comments

Comments
 (0)