如何使用JPA和JpaSpecificationExecutor按结果分组?

박주성*_*박주성 5 hibernate jpa-2.0 spring-data spring-data-jpa

我正在使用JpaSpecificationExecutor,JPA 2.0,Hibernate和MSSQL,并希望使用CriteriaBuilder构建以下查询:

SELECT CURR_DATE, MAX(POSITION) FROM TOP_COMPONENT_HISTORY GROUP BY CURR_DATE
Run Code Online (Sandbox Code Playgroud)

我的问题:可能吗?如果,怎么办?

多谢您为此下定决心!

这是我的代码。

表格(TOP_COMPONENT_HISTORY)

1   ARC_ID  varchar NO          
2   CURR_DATE   varchar NO          
3   REG_DATE    datetime2   YES         7
4   APPLY_DATE  datetime2   YES         7
5   POSITION    int YES 10  0   
6   REG_USER_ID varchar NO          
7   MOD_USER_ID varchar NO  
Run Code Online (Sandbox Code Playgroud)

服务

public Page<TopComponentHistory> findByCurrDate(ArticleSearchForm searchForm){
        return topComponentHistoryRepository.findAll(TopComponentHistory.findAllGroupBy(),constructPageSpecification(searchForm.getPageNum());
    }
Run Code Online (Sandbox Code Playgroud)

public class TopComponentHistory implements Serializable {
    public static Specification<TopComponentHistory> findAllGroupBy() {     
       How can i make query...
       return ..
    }
}
Run Code Online (Sandbox Code Playgroud)

资料库

public interface TopComponentHistoryRepository extends JpaRepository<TopComponentHistory, String>, JpaSpecificationExecutor<TopComponentHistory> {


}
Run Code Online (Sandbox Code Playgroud)

Dar*_*row -1

public static Specification<TopComponentHistory> findAllGroupBy() {
        return new Specification<TopComponentHistory>(){
            @Override
            public Predicate toPredicate(Root<TopComponentHistory> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
    query.groupBy(column_name);
    }
    }
Run Code Online (Sandbox Code Playgroud)

  • 最好有一个解释 (3认同)
  • 我花了一些时间才弄清楚如何找到正确的方法来定义分组依据中的列名称。所以在 Deepak 示例中替换 query.groupBy(column_name); 通过 query.groupBy(root.get(TopComponentHistory_.YOUR_COLUMN)); (2认同)
  • 返回语句在哪里? (2认同)