2012-08-04 9 views
14

W JPQL mogę odzyskać podmiotom przez:Jak odzyskać tylko niektóre pola jednostki w JPQL lub HQL? Jaki jest odpowiednik ResultSet w JPQL lub HQL?

query = entityManager.createQuery("select c from Category c"); 
List<Category> categories = query.getResultList(); 

Ale jeśli chcę pobrać identyfikator i nazwę pola (tylko) podmiotu kategoria, muszę coś podobnego obiektu ResultSet, przez które mogę powiedz: rs.getString("name") i rs.getString("id"). Jak to zrobić przez JPQL, bez pobierania całej encji?

Zasadniczo, aby uzyskać informacje dotyczące zapytań takich jak: select c.id,c.name from Category c?

Odpowiedz

32

W HQL można używać list() funkcji, aby uzyskać listę Object [] tablica zawierająca wiersze wynikowe:

Query query = session.createQuery("select c.id,c.name from Category c"); 
List<Object[]> rows = query.list(); 

w zwracanego elementu tablicy 1-st będzie osobisty, drugi - nazwę.

for (Object[] row: rows) { 
    System.out.println(" ------------------- "); 
    System.out.println("id: " + row[0]); 
    System.out.println("name: " + row[1]); 
} 

Jeśli chcesz korzystać z hibernacji w Criteria API, należy użyć Projections.

Z WZP będzie działać w ten sam sposób:

List<Object[]> rows = entityManager.createQuery(queryString).getResultList(); 
+0

Widzę zapytania takie jak: "wybierz c.id, c.name z kategorii c" często w książkach JPA, ale nigdy nie mówią, jak pobrać wyniki. Jakikolwiek sposób to zrobić bez specyficznej hibernacji? – Daud

+1

Z JPA będzie działać w ten sam sposób. Dodałem przykład do mojej odpowiedzi. Pamiętaj jednak, że jeśli na przykład wybierzesz tylko kolumnę z nazwą - otrzymasz listę , a nie listę . – dimas

+0

Jaka jest zmienna 'session' w tym kontekście? 'org.hibernate.Session' nie ma metody' createQuery', przynajmniej w wersji 4.3. –

10

To nie jest wykorzystanie funkcji samego .list() co czyni to spowodować List<Object[]>. Jest to specyfikacja pól (c.id, c.name) w zapytaniu HQL. Jeśli zapytanie jest

"select c from Category c" 

Następnie query.list() zwróci List<Category> obiekt.