我正在尝试使用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);
}
}
表格数据
预期产量 Expected Output