From a9568217f794a4d6eda469c4341acb1d0544aa9c Mon Sep 17 00:00:00 2001 From: Denis Stepanov Date: Wed, 29 Jan 2025 17:03:11 +0700 Subject: [PATCH] Correct --- .../AbstractSpecificationInterceptor.java | 21 +++++++++---------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/data-runtime/src/main/java/io/micronaut/data/runtime/intercept/criteria/AbstractSpecificationInterceptor.java b/data-runtime/src/main/java/io/micronaut/data/runtime/intercept/criteria/AbstractSpecificationInterceptor.java index 1334f2e3d2..c4c5140ad6 100644 --- a/data-runtime/src/main/java/io/micronaut/data/runtime/intercept/criteria/AbstractSpecificationInterceptor.java +++ b/data-runtime/src/main/java/io/micronaut/data/runtime/intercept/criteria/AbstractSpecificationInterceptor.java @@ -55,6 +55,7 @@ import jakarta.persistence.criteria.CriteriaQuery; import jakarta.persistence.criteria.CriteriaUpdate; import jakarta.persistence.criteria.Expression; +import jakarta.persistence.criteria.From; import jakarta.persistence.criteria.Order; import jakarta.persistence.criteria.Path; import jakarta.persistence.criteria.Predicate; @@ -377,13 +378,12 @@ private CriteriaQuery createSelectIdsCriteriaQuery(MethodInvocationCo selection.add(getIdExpression(root)); // We need to select all ordered properties from ORDER BY for DISTINCT to work properly for (Sort.Order order : sort.getOrderBy()) { - Path path = null; - for (Iterator iterator = StringUtils.splitOmitEmptyStrings(order.getProperty(), '.').iterator(); iterator.hasNext(); ) { - String next = iterator.next(); - if (iterator.hasNext()) { - path = root.join(next); + Path path = root; + for (String next : StringUtils.splitOmitEmptyStrings(order.getProperty(), '.')) { + if (path instanceof From from) { + path = from.join(next); } else { - path = root.get(next); + path = path.get(next); } } selection.add(path); @@ -587,12 +587,11 @@ private List getOrders(Sort sort, Root root, CriteriaBuilder cb) { List orders = new ArrayList<>(); for (Sort.Order order : sort.getOrderBy()) { Path path = root; - for (Iterator iterator = StringUtils.splitOmitEmptyStrings(order.getProperty(), '.').iterator(); iterator.hasNext(); ) { - String next = iterator.next(); - if (iterator.hasNext()) { - path = root.join(next); + for (String next : StringUtils.splitOmitEmptyStrings(order.getProperty(), '.')) { + if (path instanceof From from) { + path = from.join(next); } else { - path = root.get(next); + path = path.get(next); } } Expression expression = order.isIgnoreCase() ? cb.lower(path.type().as(String.class)) : path;