首页 > 解决方案 > JpaSpecificationExecutor 按组和最大日期值过滤数据

问题描述

我正在尝试使用 JpaSpecificationExecutor 过滤具有条件 groupBy 和 Max Date 的数据。

目前,为了获得输出,我正在使用这个基于排名的查询。在我的数据库中有很多记录(数十万条记录)。获取查询结果的时间太长。我知道通过使用 JpaSpecificationExecutor,我们可以更快地获取数据。

SELECT * FROM (SELECT *, Rank() over (Partition BY code ORDER BY dateTime DESC ) AS Rnk FROM user) pd WHERE Rnk <= 1

请帮助我在 jpa 规范中实现相同的标准,下面我附上了示例表图像、现有表和预期输出。

实体类

Class User{
    private Long id;
    private String code;
    private String dateTime;
}

存储库接口

public interface UserRepository extends JpaRepository<User, Long>, JpaSpecificationExecutor<User>{}

用户规范类

public class UserSpecification implements Specification<User>{

    private final User criteria;

     public UserSpecification(User criteria) {
            this.criteria=criteria;
        }

    @Override
    public Predicate toPredicate(Root<User > root, CriteriaQuery<?> query, CriteriaBuilder criteriaBuilder) {
        // TODO Auto-generated method stub
        return null;
    }
    }

服务等级

public class UserService {

    pubilic List<User> findAll(){
        Specification<User> spec = new UserSpecification();
        List<User>  users = userRepository.findAll(spec);
    }
}

表数据

现有样本数据

预期产出 预期产出

标签: spring-bootspring-data-jpaspring-dataspecifications

解决方案


推荐阅读