2011-08-05 12 views
13

Jeśli moja jednostka ma otrzymać jako Człowiek, mieć nazwę, właściwości ID, z WZP jak mam odzyskać wynik jak tego zapytania,Jak uzyskać wartości SELECT i wartość COUNT z JPA GROUP BY?

entityManager.createQuery("SELECT m.name AS name, COUNT(m) AS total FROM Man AS m GROUP BY m.name ORDER BY m.name ASC"); 

Czy jest jakiś sposób na wykorzystanie org.springframework.jdbc.core.RowMapper z WZP?

Odpowiedz

35

Po wykonaniu tego zapytania, zamiast uzyskać bezpośrednio listę obiektów, jak zwykle, zostanie pobrana lista Object[].

Dla każdej pobranej macierzy pierwszy element będzie nazwą wiersza, a drugi liczbą.

Nie sądzę, aby można było używać z JPA wersji RowMapper. RowMapper pochodzi ze Spring, która nie jest tą samą strukturą co JPA. Być może niektóre implementacje JPA na to pozwalają, ale nie sądzę, by było to rozsądne.

Edit - kod Przykład:

List<Object[]> results = entityManager 
     .createQuery("SELECT m.name AS name, COUNT(m) AS total FROM Man AS m GROUP BY m.name ORDER BY m.name ASC"); 
     .getResultList(); 
for (Object[] result : results) { 
    String name = (String) result[0]; 
    int count = ((Number) result[1]).intValue(); 
} 
+0

Hi Barousse! Wielkie dzięki za zwrot. Jeśli tak, to możesz podać przykładowy kod, który może pobrać dane jako listę "Object []", ponieważ jeszcze nie mam pojęcia, jak dopasować te wyniki do jakiegoś obiektu. Dzięki. – Channa

+0

@Channa: Dodano przykład kodu w odpowiedzi :) –

+0

Cześć Barousse! Wielkie dzięki za dobry kanał zwrotny, działa dobrze :), miło spędzony czas! – Channa