Skip to content

Commit be963f6

Browse files
committed
Polishing.
Remove method overloads accepting pure strings. Use switch-expressions. Correctly navigate nested joins. Introduce PathExpression interface, refine naming. See #3588 Original pull request: #3653
1 parent 363b946 commit be963f6

File tree

11 files changed

+493
-486
lines changed

11 files changed

+493
-486
lines changed

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

+9-13
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,7 @@
1515
*/
1616
package org.springframework.data.jpa.repository.query;
1717

18-
import static org.springframework.data.repository.query.parser.Part.Type.IS_NOT_EMPTY;
19-
import static org.springframework.data.repository.query.parser.Part.Type.NOT_CONTAINING;
20-
import static org.springframework.data.repository.query.parser.Part.Type.NOT_LIKE;
21-
import static org.springframework.data.repository.query.parser.Part.Type.SIMPLE_PROPERTY;
18+
import static org.springframework.data.repository.query.parser.Part.Type.*;
2219

2320
import jakarta.persistence.EntityManager;
2421
import jakarta.persistence.criteria.CriteriaQuery;
@@ -39,7 +36,6 @@
3936
import org.springframework.data.domain.Sort;
4037
import org.springframework.data.jpa.domain.JpaSort;
4138
import org.springframework.data.jpa.repository.query.JpqlQueryBuilder.ParameterPlaceholder;
42-
import org.springframework.data.jpa.repository.query.JpqlQueryBuilder.PathAndOrigin;
4339
import org.springframework.data.jpa.repository.query.ParameterBinding.PartTreeParameterBinding;
4440
import org.springframework.data.jpa.repository.support.JpqlQueryTemplates;
4541
import org.springframework.data.mapping.PropertyPath;
@@ -183,8 +179,8 @@ protected JpqlQueryBuilder.Select buildQuery(Sort sort) {
183179
QueryUtils.checkSortExpression(order);
184180

185181
try {
186-
expression = JpqlQueryBuilder.expression(JpqlUtils.toExpressionRecursively(metamodel, entity, entityType,
187-
PropertyPath.from(order.getProperty(), entityType.getJavaType())));
182+
expression = JpqlUtils.toExpressionRecursively(metamodel, entity, entityType,
183+
PropertyPath.from(order.getProperty(), entityType.getJavaType()));
188184
} catch (PropertyReferenceException e) {
189185

190186
if (order instanceof JpaSort.JpaOrder jpaOrder && jpaOrder.isUnsafe()) {
@@ -227,7 +223,7 @@ private JpqlQueryBuilder.Select doSelect(Sort sort) {
227223
requiredSelection = getRequiredSelection(sort, returnedType);
228224
}
229225

230-
List<PathAndOrigin> paths = new ArrayList<>(requiredSelection.size());
226+
List<JpqlQueryBuilder.PathExpression> paths = new ArrayList<>(requiredSelection.size());
231227
for (String selection : requiredSelection) {
232228
paths.add(JpqlUtils.toExpressionRecursively(metamodel, entity, entityType,
233229
PropertyPath.from(selection, returnedType.getDomainType()), true));
@@ -251,7 +247,7 @@ private JpqlQueryBuilder.Select doSelect(Sort sort) {
251247

252248
} else {
253249

254-
List<PathAndOrigin> paths = entityType.getIdClassAttributes().stream()//
250+
List<JpqlQueryBuilder.PathExpression> paths = entityType.getIdClassAttributes().stream()//
255251
.map(it -> JpqlUtils.toExpressionRecursively(metamodel, entity, entityType,
256252
PropertyPath.from(it.getName(), returnedType.getDomainType()), true))
257253
.toList();
@@ -320,7 +316,7 @@ public JpqlQueryBuilder.Predicate build() {
320316
PropertyPath property = part.getProperty();
321317
Type type = part.getType();
322318

323-
PathAndOrigin pas = JpqlUtils.toExpressionRecursively(metamodel, entity, entityType, property);
319+
JpqlQueryBuilder.PathExpression pas = JpqlUtils.toExpressionRecursively(metamodel, entity, entityType, property);
324320
JpqlQueryBuilder.WhereStep where = JpqlQueryBuilder.where(pas);
325321
JpqlQueryBuilder.WhereStep whereIgnoreCase = JpqlQueryBuilder.where(potentiallyIgnoreCase(pas));
326322

@@ -385,7 +381,7 @@ public JpqlQueryBuilder.Predicate build() {
385381
return type.equals(SIMPLE_PROPERTY) ? where.isNull() : where.isNotNull();
386382
}
387383

388-
JpqlQueryBuilder.Expression expression = potentiallyIgnoreCase(property, placeholder(metadata));
384+
JpqlQueryBuilder.Expression expression = potentiallyIgnoreCase(property, placeholder(simple));
389385
return type.equals(SIMPLE_PROPERTY) ? whereIgnoreCase.eq(expression) : whereIgnoreCase.neq(expression);
390386
case IS_EMPTY:
391387
case IS_NOT_EMPTY:
@@ -420,8 +416,8 @@ private <T> JpqlQueryBuilder.Expression potentiallyIgnoreCase(JpqlQueryBuilder.O
420416
* @param path must not be {@literal null}.
421417
* @return
422418
*/
423-
private <T> JpqlQueryBuilder.Expression potentiallyIgnoreCase(PathAndOrigin path) {
424-
return potentiallyIgnoreCase(path.path(), JpqlQueryBuilder.expression(path));
419+
private <T> JpqlQueryBuilder.Expression potentiallyIgnoreCase(JpqlQueryBuilder.PathExpression path) {
420+
return potentiallyIgnoreCase(path.getPropertyPath(), path);
425421
}
426422

427423
/**

0 commit comments

Comments
 (0)