Ich versuche, wie in Titel, eine Unterabfrage in select-Klausel wie in dieser einfachen SQL einzufügen:Subquery in select-Klausel mit JPA Criteria API
SELECT id, name, (select count(*) from item) from item
das ist natürlich nur eine Mock-Abfrage nur zu machen mein Punkt. (Der Punkt wäre die letzte Rechnung zu bekommen für jedes Element von der Abfrage zurückgegeben.)
ich das versucht habe:
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));
}
aber ich bekomme nur:
java.lang .IllegalStateException: Unterabfrage kann nicht in Select-Klausel
Wie kann ich ein ähnliches Ergebnis erhalten?
genau, welche Version von JPA-Spezifikation bedeutet das Wort "jetzt" in Ihrem Antwort bedeuten? –
"Jetzt" bedeutete genau die neueste Version von JPA, die war (ist) 2.1 –