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

标签 java mysql spring spring-boot jpa

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

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

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

所以我有我的规范:

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"));

关于java - Spring - 使用 CriteriaQuery (规范)的 OrderBy 关系属性会忽略没有关系的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59225711/

相关文章:

java - 在 Spring MVC 中 - model.addAttribute 动态数据的用法以及如何将数据放置在 jsp 文件中

java - 如何从 java 中的 url 中提取 Web 服务的请求参数和 header

java - hibernate.jdbc.fetch_size 或 @QueryHints(@javax.persistence.QueryHint(名称 ="org.hibernate.fetchSize",值 ="10")) 不起作用

java - 同步三个线程

PHP 表单发布并插入多行

python - 如何获取所有mysql元组结果并转换为json

mysql - 如何在没有典型数据库设置的情况下连接到 Rails 中的数据库并检索结果

java - A*算法当前节点向外扩散而不是一个方向

java - spring boot删除 Controller 中的员工代码困惑

java - Spring Boot @RequestBody 没有完全复制参数