使用JPA规范按子查询排序?

时间:2020-03-26 10:26:19

标签: java postgresql hibernate jpa

我有以下规范,其中我基于父实体的子属性(标签)的值来过滤父实体(TAG)。

由于此问题底部的相关问题,我使用子查询而不是联接。

我也希望能够根据标签的标签进行排序,但是,基于以下条件:

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

我相信JPA规范不支持在子查询中使用by by,所以想知道我有什么选择吗?

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 HINT_PASS_DISTINCT_THROUGH reduces the amount of Entities returned per page for a PageRequest down to below the configured page size (PostgreSQL)

Pass single Join instance to multiple Specification instances?

0 个答案:

没有答案