Попробуйте упорядочить все результаты в порядке убывания и получить первый результат, что-то вроде этого:
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.