Skip to content

Commit e58f1cb

Browse files
committed
Hacking.
1 parent 49267b2 commit e58f1cb

17 files changed

+1629
-348
lines changed

spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/JpaCountQueryCreator.java

Lines changed: 18 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -15,16 +15,12 @@
1515
*/
1616
package org.springframework.data.jpa.repository.query;
1717

18-
import jakarta.persistence.criteria.CriteriaBuilder;
19-
import jakarta.persistence.criteria.CriteriaQuery;
20-
import jakarta.persistence.criteria.Expression;
21-
import jakarta.persistence.criteria.Predicate;
22-
import jakarta.persistence.criteria.Root;
18+
import jakarta.persistence.EntityManager;
2319

2420
import org.springframework.data.domain.Sort;
21+
import org.springframework.data.jpa.repository.support.JpqlQueryTemplates;
2522
import org.springframework.data.repository.query.ReturnedType;
2623
import org.springframework.data.repository.query.parser.PartTree;
27-
import org.springframework.lang.Nullable;
2824

2925
/**
3026
* Special {@link JpaQueryCreator} that creates a count projecting query.
@@ -36,41 +32,35 @@
3632
*/
3733
public class JpaCountQueryCreator extends JpaQueryCreator {
3834

39-
private boolean distinct;
35+
private final boolean distinct;
36+
private final ReturnedType returnedType;
4037

4138
/**
42-
* Creates a new {@link JpaCountQueryCreator}.
39+
* Creates a new {@link JpaCountQueryCreator}
4340
*
4441
* @param tree
45-
* @param type
46-
* @param builder
42+
* @param returnedType
4743
* @param provider
44+
* @param templates
45+
* @param em
4846
*/
49-
public JpaCountQueryCreator(PartTree tree, ReturnedType type, CriteriaBuilder builder,
50-
ParameterMetadataProvider provider) {
47+
public JpaCountQueryCreator(PartTree tree, ReturnedType returnedType, ParameterMetadataProvider provider,
48+
JpqlQueryTemplates templates, EntityManager em) {
5149

52-
super(tree, type, builder, provider);
50+
super(tree, returnedType, provider, templates, em);
5351

5452
this.distinct = tree.isDistinct();
53+
this.returnedType = returnedType;
5554
}
5655

5756
@Override
58-
protected CriteriaQuery<? extends Object> createCriteriaQuery(CriteriaBuilder builder, ReturnedType type) {
57+
protected JpqlQueryBuilder.AbstractJpqlQuery buildQuery(Sort sort) {
5958

60-
return builder.createQuery(Long.class);
61-
}
62-
63-
@Override
64-
@SuppressWarnings("unchecked")
65-
protected CriteriaQuery<? extends Object> complete(@Nullable Predicate predicate, Sort sort,
66-
CriteriaQuery<? extends Object> query, CriteriaBuilder builder, Root<?> root) {
67-
68-
CriteriaQuery<? extends Object> select = query.select(getCountQuery(query, builder, root));
69-
return predicate == null ? select : select.where(predicate);
70-
}
59+
JpqlQueryBuilder.SelectStep selectStep = JpqlQueryBuilder.selectFrom(returnedType.getDomainType());
60+
if (this.distinct) {
61+
selectStep = selectStep.distinct();
62+
}
7163

72-
@SuppressWarnings("rawtypes")
73-
private Expression getCountQuery(CriteriaQuery<?> query, CriteriaBuilder builder, Root<?> root) {
74-
return distinct ? builder.countDistinct(root) : builder.count(root);
64+
return selectStep.count();
7565
}
7666
}

spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/JpaKeysetScrollQueryCreator.java

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
*/
1616
package org.springframework.data.jpa.repository.query;
1717

18+
import jakarta.persistence.EntityManager;
1819
import jakarta.persistence.criteria.CriteriaBuilder;
1920
import jakarta.persistence.criteria.CriteriaQuery;
2021
import jakarta.persistence.criteria.Predicate;
@@ -27,6 +28,7 @@
2728
import org.springframework.data.domain.KeysetScrollPosition;
2829
import org.springframework.data.domain.Sort;
2930
import org.springframework.data.jpa.repository.support.JpaEntityInformation;
31+
import org.springframework.data.jpa.repository.support.JpqlQueryTemplates;
3032
import org.springframework.data.repository.query.ReturnedType;
3133
import org.springframework.data.repository.query.parser.PartTree;
3234
import org.springframework.lang.Nullable;
@@ -42,21 +44,21 @@ class JpaKeysetScrollQueryCreator extends JpaQueryCreator {
4244
private final JpaEntityInformation<?, ?> entityInformation;
4345
private final KeysetScrollPosition scrollPosition;
4446

45-
public JpaKeysetScrollQueryCreator(PartTree tree, ReturnedType type, CriteriaBuilder builder,
46-
ParameterMetadataProvider provider, JpaEntityInformation<?, ?> entityInformation,
47-
KeysetScrollPosition scrollPosition) {
47+
public JpaKeysetScrollQueryCreator(PartTree tree, ReturnedType type, ParameterMetadataProvider provider,
48+
JpqlQueryTemplates templates, JpaEntityInformation<?, ?> entityInformation, KeysetScrollPosition scrollPosition,
49+
EntityManager em) {
4850

49-
super(tree, type, builder, provider);
51+
super(tree, type, provider, templates, em);
5052

5153
this.entityInformation = entityInformation;
5254
this.scrollPosition = scrollPosition;
5355
}
5456

55-
@Override
57+
// TODO
5658
protected CriteriaQuery<?> complete(@Nullable Predicate predicate, Sort sort, CriteriaQuery<?> query,
5759
CriteriaBuilder builder, Root<?> root) {
5860

59-
KeysetScrollSpecification<Object> keysetSpec = new KeysetScrollSpecification<>(scrollPosition, sort,
61+
/*KeysetScrollSpecification<Object> keysetSpec = new KeysetScrollSpecification<>(scrollPosition, sort,
6062
entityInformation);
6163
Predicate keysetPredicate = keysetSpec.createPredicate(root, builder);
6264
@@ -69,7 +71,10 @@ protected CriteriaQuery<?> complete(@Nullable Predicate predicate, Sort sort, Cr
6971
return queryToUse.where(keysetPredicate);
7072
}
7173
72-
return queryToUse;
74+
return queryToUse;*/
75+
76+
// TODO
77+
return null;
7378
}
7479

7580
@Override

0 commit comments

Comments
 (0)