我有以下规范,其中我基于父实体的子属性(标签)的值来过滤父实体(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);
}
}
相关:
Pass single Join instance to multiple Specification instances?