英文:
Remove duplicates from result set using javax.persistence.criteria by data prorety
问题
我需要返回最新的数据。日期字段名为 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();
}
英文:
I need to return the latest data. Date fields are called dateModified
. Since the old data is not deleted in any way, there are a lot of similar records, they differ only in the dateModified
field. The current query returns all records, and I need only the most recent in the field 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
尝试按降序排列所有结果,并获取第一个结果,类似于这样:
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的元素。
英文:
Try to order all the results in descending order and get the first result, something like this:
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();
}
The method will return a list with one element which has the most recent dateModified.
专注分享java语言的经验与见解,让所有开发者获益!
评论