【发布时间】:2011-01-11 20:33:55
【问题描述】:
如标题所示,我正在尝试在 select 子句中插入一个子查询,就像在这个简单的 SQL 中一样:
SELECT id, name, (select count(*) from item) from item
这显然只是一个模拟查询,只是为了说明我的观点。 (重点是获取查询返回的每个项目的最后一张发票。)
我试过了:
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Tuple> c = cb.createTupleQuery();
Root<Item> item= c.from(Item.class);
Subquery<Long> scount = c.subquery(Long.class);
Root<Item> sarticolo = scount.from(Item.class);
scount.select(cb.count(sitem));
c.multiselect(item.get("id"),item.get("nome"), scount);
Query q = em.createQuery(c);
q.setMaxResults(100);
List<Tuple> result = q.getResultList();
for(Tuple t: result){
System.out.println(t.get(0) + ", " + t.get(1) + ", " + t.get(2));
}
但我只得到:
java.lang.IllegalStateException: select子句中不能出现子查询
我怎样才能得到类似的结果?
【问题讨论】:
标签: jpa select subquery criteria