我需要返回最新数据。日期字段称为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();
}

最佳答案

尝试按降序排列所有结果,并获得第一个结果,如下所示:

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的元素。

10-08 11:30