diff --git a/iplass-gem/src/main/java/org/iplass/gem/command/generic/search/SearchContextBase.java b/iplass-gem/src/main/java/org/iplass/gem/command/generic/search/SearchContextBase.java index 5584f7ff42..23696949f3 100644 --- a/iplass-gem/src/main/java/org/iplass/gem/command/generic/search/SearchContextBase.java +++ b/iplass-gem/src/main/java/org/iplass/gem/command/generic/search/SearchContextBase.java @@ -59,6 +59,7 @@ import org.iplass.mtp.entity.query.SortSpec.NullOrderingSpec; import org.iplass.mtp.entity.query.SortSpec.SortType; import org.iplass.mtp.entity.query.condition.Condition; +import org.iplass.mtp.entity.query.value.ValueExpression; import org.iplass.mtp.entity.query.value.primary.EntityField; import org.iplass.mtp.entity.query.value.primary.Literal; import org.iplass.mtp.impl.parser.ParseContext; @@ -190,20 +191,21 @@ public Select getSelect() { } } } + List fieldSelection = select.stream() + . map(EntityField::new) + .toList(); + List orderBySelection = Optional.ofNullable(getOrderBy()) + .stream() + .flatMap(orderBy -> orderBy.getSortSpecList() + .stream() + .map(SortSpec::getSortKey)) + .toList(); + // ソート条件のデータを取得カラムにしておかないと、DistinctでSQLエラーになる。 - OrderBy orderBy = getOrderBy(); - if (orderBy != null) { - for (SortSpec sortSpec : orderBy.getSortSpecList()) { - String sortKey = sortSpec.getSortKey() - .toString(); - if (!select.contains(sortKey)) - addSearchProperty(select, sortKey); - } - } - boolean distinct = getConditionSection().isDistinct(); - Select s = new Select().add(select.toArray()); - s.setDistinct(distinct); - return s; + boolean isDistinct = getConditionSection().isDistinct(); + return new Select(isDistinct, (isDistinct ? Stream.concat(fieldSelection.stream(), orderBySelection.stream()) : fieldSelection.stream()) + .distinct() + .toList()); } @Override