我需要返回最新数据。日期字段称为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的元素。