有人可以帮我创建JPA Criteria Builder查询以实现此目的吗?:
select id from (
select distinct r.id
r.date
r.name
from report r
inner join unit u
on u.report_id = r.id
order by
r.date desc,
r.name asc)
where rownum <= 10
我可以创建内部查询:
CriteriaQuery<Object[]> innerQuery = cb.createQuery(Object[].class);
Root<ReportEntity> root = innerQuery.from(ReportEntity.class);
List<Ojbect[]> resultLsit = em.createQuery(
innerQuery.multiselect(root.get(ReportEntity_.id),
root.get(ReportEntity_.date),
root.get(ReportEntity_.name)
.distinct(true)
.orderBy(cb.desc(root.get(ReportEntity_.date)),
cb.asc(root.get(ReportEntity.name))
).setMaxResults(10).getResultList();
提前thx :)
我决定获取List of Object []然后从数组中检索id
List idList = resultList.stream()。map(array - &gt;(Long)array [0])。collect(Collectors.toList());
这是代码味道,但不幸的是我还没有找到更好的解决方案。
注意我使用这种方法来处理Hibernate问题:
&#34;警告“使用集合提取指定firstResult / maxResults;在记忆中应用!“? - 由于在hql或条件查询中使用fetch和setMaxResults,会弹出此警告。 这就是为什么我首先得到所有id,然后我根据这个id找到所有实体。 (从ReportEntity r中选择*,其中r.id in:idList) - 像这样的smth。