TypedQuery anstelle der normalen Abfrage in JPA
Ist es möglich, dies zu schreiben, Query-as-a TypedQuery und lassen Sie die beiden Lange ' s run in ein Objekt mit zwei öffentlichen Lange Felder im inneren.
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;
Du musst angemeldet sein, um einen Kommentar abzugeben.
JPA hat eine Funktion, die nur für diese - Konstruktor-Ausdrücke:
Ihre DTO-Klasse kann ein POJO. Alle es braucht ist ein public-Konstruktor akzeptiert 2
Long
s. Bitte beachten Sie, dass Sie haben, um eine voll qualifizierte name der Klasse, die nach derNEW
Betreiber.SELECT NEW com.company.ui.EntityIDKey(c.companyId, c.name) FROM Company c WHERE c.companyId is not null and c.name is not null and length(trim(c.name)) > 0 order by c.name asc
. Ich bin mit einem TypedQuery wie folgt:List<EntityIDKey> companies = getEntityManager().createQuery(sql, EntityIDKey.class).getResultList();
EntityIDKey
ist eine Entität. Ich bin mit Hibernate Anbieter und irgendwie vermutet, dass es funktioniert. Eine regelmäßige Abfrage, baut eine Sammlung vonCompany
funktioniert Prima.q.getResultList()
liefert einen generischen Typ der Liste.@SuppressWarnings("unchecked")
. Vielleicht gibt es einen noch typesafe Weise mit den Kriterien-API, aber ich bin nicht vertraut genug mit ihm.EntityIDKey
mit @Entity (obwohl es ist nicht dauerhaft; es ist nur ein DTO zwischen service layer und UI-controller), ist, dass gegen Sie ein Muster oder Konvention? So, ich kann mit einerTypedQuery
.Neue code sieht jetzt wie folgt aus.
Danke für Sie Hilfe.
Map
rechts von der Abfrage, also die transformation Teil in den letzten 3 Zeilen hat, zu bleiben, fürchte ich.