JpaSpecificationExecutor для подгонки данных по группам и максимальному значению даты - PullRequest
0 голосов
/ 05 декабря 2018

Я пытаюсь использовать 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);
    }
}

Табличные данные

Существующие данные образца

Ожидаемый результат Ожидаемый результат

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...