如何使用jpa 1.0.1中的条件构建器从语句中将实体默认输出嵌套到另一个选择查询中?

时间:2017-08-09 16:14:30

标签: java sql spring spring-data spring-data-jpa

我正在使用spring数据实现分页,并且我想在我的规范中进行排序。

 SELECT  *
    FROM
      ( 
      SELECT distinct *
    FROM
      ( 
      SELECT  p.PROJECT_ID,
              p.PROJECT_NAME,
              p.PROJECT_TYPE
      FROM PROJECT p
      LEFT OUTER JOIN code c
      ON p.codeId=c.ID
WHERE p.PROJECT_NAME IN ('test')
      ORDER BY c.LABEL ASC
      )
      )
    WHERE rownum <= 25;

但我的规范是创建以下脚本

    SELECT  *
    FROM
      ( 
      SELECT distinct p.PROJECT_ID,
              p.PROJECT_NAME,
              p.PROJECT_TYPE
      FROM PROJECT p
      LEFT OUTER JOIN code c
      ON p.codeId=c.ID
WHERE p.PROJECT_NAME IN ('test')
      ORDER BY c.LABEL ASC
      )
    WHERE rownum <= 25;

实际上我在加入后会得到重复记录,所以我添加了不同的函数来获取不同的记录,但是对于order by子句来说,order by参数应该存在于select语句中,这在我的情况下是不可能的,就像在我的实体中一样它不存在我也不能改变它。 所以我只想将项目语句的select语句嵌套到另一个语句中,并且我想在第一个脚本中显示不同的内容。我是Spring jpa的新手,所以任何帮助都会有所帮助。

这是我的规范。

public static Specification<Project> projectListSearchSpec(Set<String> deptNameList, ProjectSearchDto searchDTO) {
        return new Specification<Project>() {
            @Override
            public Predicate toPredicate(Root<Project> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
                query.distinct(true);

                Predicate all = root.<Project>get("projectName").in(deptNameList);
                return all;
            }

        };
    }

0 个答案:

没有答案