Criteria Builder从select中选择

时间:2015-12-02 09:42:21

标签: java hibernate jpa criteria

有人可以帮我创建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。

0 个答案:

没有答案