spring - Jpa规范执行器: complex queries with specifications

标签 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;
    }
}

谢谢!

最佳答案

不幸的是,你不能使用 spring-data 规范来做到这一点。

您可以在此处了解为什么如何在仍然使用 spring-data 的情况下执行此操作(有一个简单的查询仅返回一个字段): spring-data specifications - return list of ids instead of objects

要获取字段列表,您可以使用 JPA 元组。您可以在这里找到一个示例: JPA & Criteria API - Select only specific columns

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

关于spring - Jpa规范执行器: complex queries with specifications,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14204841/

相关文章:

java - 配置多个数据源时发现 IllegalTransactionStateException 预绑定(bind) JDBC 连接

java - Hibernate OneToMany 关联表字段对于repository.save(entityModel) 不能为空

java - 登录一个json文件

java - Apache Tomcat 执行具有相同启动时加载的 Servlet

spring - 使用 Spring Security 以根据用户是否经过身份验证为同一 URL 显示不同的内容

java - <丰富:popupPanel buttons not working in JSF Project

Spring Data JPA - 多个 EnableJpaRepositories

java - @Transactional 和 Spring Data

java - Spring AOP : Advice not executing for method with custom annotation

java - Spring Data JPA 返回同一对象的多个实例