JpaSpecificationExecutor:具有规范的复杂查询

use*_*850 2 spring spring-data-jpa

我实际上是在使用不同的过滤器进行研究。

当我使用JpaRepository进行简单查询时,我发现JpaSpecificationExecutor可以使用Criterias进行动态查询。

我的问题是我需要使用group by和count()创建一个复杂的查询。分组依据是可以的,但是我找不到如何覆盖“选择”部分来放置“计数”指令的方法。

有人可以帮我吗?

我正在使用spring 3.1.2和spring-jpa-data 1.0.3这是我的代码:

return new Specification< Article >() {

    @Override
    public Predicate toPredicate(final Root<Article> root,
        final CriteriaQuery<?> query, final CriteriaBuilder builder) {
        //count ???
        query.groupBy(root.get(Article_.id));
        Predicate p = builder.and(builder.like(root.<String> get(Article_.title), "%" + title + "%"));

        return p;
    }
}
Run Code Online (Sandbox Code Playgroud)

谢谢 !

rch*_*ukh 5

不幸的是,您不能使用spring-data Specification执行此操作。

您可以在这里看到为什么以及如何在仍使用spring-data的情况下做到这一点(有一个简单的查询仅返回一个字段): spring-data规范-返回id列表而不是对象

要获取字段列表,可以使用JPA Tuple。您可以在此处找到示例: JPA和条件API-仅选择特定的列

简短版本:您需要创建一个将使用的自定义spring-data存储库CriteriaQuery<Tuple>

  • 谢谢你的帮助。我选择提出两个要求。一个用规范来获取我所有的id。第二个(计数)带有与我的 ID 匹配的简单查询。 (2认同)