Удалите дубликаты из набора результатов, используя javax.persistence.criteria по данным prorety - PullRequest
0 голосов
/ 04 мая 2020

Мне нужно вернуть последние данные. Поля даты называются dateModified. Поскольку старые данные никак не удаляются, подобных записей много, они различаются только в поле dateModified. Текущий запрос возвращает все записи, а мне нужны только самые последние в поле dateModified.

    public List<SomeDto> search(SearchDto criteria) {
            final CriteriaBuilder cb = entityManager.getCriteriaBuilder();
            final CriteriaQuery<SomeDto> query = cb.createQuery(SomeDto.class);
            final Root<SomeModel> root = query.from(SomeModel.class);
            query.multiselect(
                 root.get(ID),
                 root.get(SOME_ENTERNAL_ID),
                 root.get(SOME_NAME_ID));
                 query.where(createPredicates(cb, query, root, criteria));
    return entityManager.createQuery(query).getResultList();
}

1 Ответ

0 голосов
/ 04 мая 2020

Попробуйте упорядочить все результаты в порядке убывания и получить первый результат, что-то вроде этого:

public List<SomeDto> search(SearchDto criteria) {
            final CriteriaBuilder cb = entityManager.getCriteriaBuilder();
            final CriteriaQuery<SomeDto> query = cb.createQuery(SomeDto.class);
            final Root<SomeModel> root = query.from(SomeModel.class);
            query.multiselect(
                 root.get(ID),
                 root.get(SOME_ENTERNAL_ID),
                 root.get(SOME_NAME_ID));
                 query.where(createPredicates(cb, query, root, criteria))
                      .orderBy(cb.desc(root.get("dateModified")));
    return entityManager.createQuery(query)
                        .setFirstResult(0)
                        .setMaxResults(1)
                        .getResultList();
}

Метод вернет список с одним элементом, который имеет самый последний dateModified.

...