2010-05-29 4 views
5

Ich versuche, etwas zu tun, die als Torte in PHP & Co einfach: SELECT COUNT (x) als numItems, AVG (y) als Durchschnitt ... FROM ZJPQL: Welche Art von Objekten enthält eine Ergebnisliste beim Abfragen mehrerer Spalten?

In PHP ich bekommen würde einfaches Array wie [{numItems: 0, Durchschnitt: 0}]:

echo "Number of Items: " . $result[0]['numItems']; 

Regel in JPQL einzelne Objekte oder einzelne Spalten und erhalten Listen Typen, zum Beispiel List<SomeEntity> oder List<Long> Sie nur abfragen, die ich so verwenden könnte. Aber was bekommen Sie, wenn Sie mehrere Spalten abfragen?

Antwort

5

Sie erhalten eine Object[] (oder eine List<Object[]>). Aus dem Abschnitt 4.8.1 Ergebnistyp der SELECT-Klausel der PPV-1.0-Spezifikation:

Der Ergebnistyp der SELECT-Klausel wird durch die die Ergebnistypen die select_expressions enthaltenen Definition in es. Wenn mehrere select_expressions in der SELECT-Klausel verwendet wird, ist das Ergebnis der Abfrage des Typs Object[], und die Elemente in diesem Ergebnis entsprechen, um die Reihenfolge ihrer Spezifikation in der SELECT-Klausel und in Art zu den Ergebnistypen von jedem der select_expressions.

Wenn Sie stark typisieren möchten, können Sie einen Konstruktorausdruck in der SELECT-Klausel verwenden. Aus dem Abschnitt 4.8.2 Constructor Ausdrücke in der SELECT-Klausel:

Ein Konstruktor kann in der SELECT-Liste verwendet werden, um eine Rückkehr oder mehr Java Instanzen. Die angegebene Klasse ist nicht erforderlich, um eine Entität zu sein, oder auf die Datenbank zugeordnet werden. Der Konstruktorname muss vollständig qualifiziert sein.

Wenn ein Unternehmen Klassenname in der SELECT-NEW-Klausel angegeben, die resultierenden Entitätsinstanzen sind im neuen Zustand.

SELECT NEW com.acme.example.CustomerDetails(c.id, c.status, o.count) 
FROM Customer c JOIN c.orders o 
WHERE o.count > 100 
+0

Vielen Dank für Ihre Antwort! – Bunkerbewohner

0

Sie können auch Tuple verwenden und eine Liste von Tuple (List<Tuple>), die Sie als eine Liste von Karte verwenden können.