У меня есть следующая спецификация, где я фильтрую родительский объект (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 нескольким экземплярам Спецификации?