È possibile scrivere questa query come TypedQuery e lasciare che i due Long vengano eseguiti in un oggetto con all'interno due campi Long pubblici.TypedQuery anziché normale Query in JPA
Query q = em.createQuery(
"SELECT c.id, COUNT(t.id) " +
"FROM PubText t " +
"JOIN t.comm c " +
"WHERE c.element = ?1 " +
"GROUP BY c.id");
q.setParameter(1, e);
List<?> rl = q.getResultList();
Iterator<?> it = rl.iterator();
HashMap<Long, Long> res = new HashMap<Long, Long>();
while (it.hasNext()) {
Object[] n = (Object[]) it.next();
res.put((Long)n[0], (Long)n[1]);
}
return res;
hi @kostja Mi viene visualizzato un errore (Impossibile creare TypedQuery per la query con più di un ritorno). Il mio SQL ha questo aspetto: 'SELEZIONA NUOVO com.company.ui.EntityIDKey (c.companyId, c.name) FROM Azienda c WHERE c.companyId non è nullo e c.name non è nullo e lunghezza (trim (c.name))> 0 ordina per c.name asc'. Sto usando un TypedQuery come segue: 'Elenco companies = getEntityManager(). CreateQuery (sql, EntityIDKey.class) .getResultList();' –
questo può essere il caso se il tuo EntityIDKey non è un'entità. Il provider è libero di non supportare tali query. Hai provato a usare una normale Query? – kostja
è vero, "EntityIDKey' non è un'entità. Sto usando il fornitore di Hibernate e presumibilmente in qualche modo funzionerà. Una query regolare che crea una raccolta di 'Company' funziona perfettamente. –