Упорядочить по подзапросу с использованием спецификации JPA? - PullRequest
0 голосов
/ 26 марта 2020

У меня есть следующая спецификация, где я фильтрую родительский объект (TAG) на основе значения его дочерних свойств (Labels).

Я использую подзапросы вместо объединений из-за связанных вопросы, размещенные в нижней части этого вопроса.

Я также хочу иметь возможность заказывать теги на основе их ярлыков, однако, исходя из следующего:

https://hibernate.atlassian.net/browse/HHH-256

Я считаю, что использование порядка в подзапросах не поддерживается в спецификациях JPA, поэтому просто интересно, каковы мои альтернативы?

public class MySpec implements Specification<Tag>
{
    @Override
    public Predicate toPredicate(
        final Root<Tag> root,
        final CriteriaQuery<?> query,
        final CriteriaBuilder builder)
    {
        final String argument = arguments.get(0);

        final Subquery<Label> subQuery = query.subquery(Label.class);

        final Root<Label> subRoot = subQuery.from(Label.class);

        final Predicate tagPredicate = builder.equal(subRoot.get("tag"), root);

        final Predicate labelKeyPredicate = builder.equal(subRoot.get("labelIdentity").get("key"), "owner");

        subQuery.select(subRoot).where(tagPredicate, labelKeyPredicate, builder.like(subRoot.get("value"), argument.replace('*', '%'));

        return builder.exists(subQuery);
    }
}

Связанные:

Подсказка HINT_PASS_DISTINCT_THROUGH уменьшает количество сущностей, возвращаемых на страницу для PageRequest, до значения ниже настроенного размера страницы (PostgreSQL)

Передача одного экземпляра Join нескольким экземплярам Спецификации?

...