繁体   English   中英

Spring - 使用 CriteriaQuery(规范)的 OrderBy 关系属性忽略没有关系的行

[英]Spring - OrderBy relation attribute using CriteriaQuery (Specification) ignores the rows which does not have the relation

我想按关系属性排序,我使用toPredicat (Jpa Specification ,SpringBoot 框架)来生成查询。

我得到了正确的顺序,但问题是没有这种关系(关系为空)的行已从结果集中删除

下面是一个例子:假设我们有两个实体, Email可能有一个Document 我想订购的Emails使用Document.name (的属性名称Document

所以我有我的规格:

import org.springframework.data.jpa.domain.Specification;
import javax.persistence.criteria.*;


public class EmailSpecification implements Specification<Email> {


    @Override
    public Predicate toPredicate(Root<Email> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) {
        List<Predicate> predicates = new ArrayList<>();

        if (xx) {
            predicates.add(criteriaBuilder.like(yy);
        }

        //...

        criteriaQuery.orderBy(criteriaBuilder.asc(
                        root.get('document').get('name'));



        return criteriaBuilder.and(predicates.toArray(new Predicate[predicates.size()]))
    }
}

当我打电话时

List<Email> result = emailRepository.findAll(new EmailSpecification()); 

我有一个顺序正确的电子邮件列表,但只有包含文档的电子邮件(我想要所有电子邮件,即使它没有文档)

我认为你应该需要一个左连接,可能是这样的:

criteriaQuery.orderBy(criteriaBuilder.asc(
                        root.join("document", JoinType.LEFT).get("name"));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM