Я пытаюсь использовать 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);
}
}
Табличные данные
Существующие данные образца
Ожидаемый результат Ожидаемый результат