2012-10-08 13 views

Odpowiedz

10

PagingAndSortingRepository tylko dodaje bardzo podstawowe metody CRUD w trybie paginacji. Jak opisuje model reference documentation, można po prostu dodać parametr Pageable do dowolnej zdefiniowanej przez siebie metody kwerendy, aby uzyskać paginację tego zapytania.

interface CustomerRepository implements Repository<Customer, Long> { 

    Page<Customer> findByLastname(String lastname, Pageable pageable); 

    List<Customer> findByFirstname(String firstname, Pageable pageable); 
} 

Pierwsza metoda zwróci Page zawierająca metadane strona typu całkowitych dostępnych elementów itd. W celu obliczenia te dane to powodować dodatkowe zapytanie zliczania dla zapytania pochodzącego. Druga metoda zapytania zwraca prosty zestaw wyników w plasterkach bez wykonywania kwerendy liczenia.

+0

Witam @Olivier z Pageagle nie widzę gdzie określić 'offset',' PageRequest' akceptuje tylko 'page' i' size'. Naprawdę nie rozumiem, dlaczego muszę "page * size", aby uzyskać moje "offset". czy istnieje sposób użycia 'offset' w przeciwieństwie do' page'? –

+1

Powód "PageRequest" odsłania "stronę" i "rozmiar" jako jedyne "przesunięcie" nie jest wystarczający, ponieważ nadal potrzebujesz "rozmiaru". Pojęcie paginacji zwykle oznacza widok strony na dane, co tutaj wyrażamy. Ale nic nie stoi na przeszkodzie, aby wymyślić własną implementację "Pageable", która działa z offsetami i rozmiarami. –

+0

W jaki sposób możemy używać narzędzia Pagivation with Query API? –

2

Dla paginacji trzeba 2 metody jak GetCount (stronicowalnej stronicowalnej) i findAll (stronicowalnej stronicowalnej)

Wykorzystując tę ​​funkcjonalność w Hibernate jest jednak trywialne. Jeśli masz jakiekolwiek zapytania HQL można po prostu to zrobić:

public Long getCount(Pageable pageable) { 
    Query q = session.createQuery("Select count(t) From TableClass t where t.city = 'NY'"); 
    Long cnt = (Long) q.uniqueResult(); 
    return cnt; 
} 

public List<TableClass> findAll(Pageable pageable) { 
    Query q = session.createQuery("From TableClass t where t.city = 'NY'"); 
    q.setFirstResult(start); 
    q.setMaxResults(length); 
    List<TableClass> tableClasslist = q.list(); 
    return tableClasslist; 
} 

Podobnie, jeśli masz zapytanie kryteriów, to skutecznie to samo:

public Long getCount(Pageable pageable) { 
    Criteria c = session.createCriteria(TableClass.class); 
    c.setProjection(Projections.rowCount()); 
    Long cnt = (Long) c.uniqueResult(); 
    return cnt; 
} 

public List<TableClass> findAll(Pageable pageable) { 
    Criteria c = session.createCriteria(TableClass.class); 
    c.setParameter("city","NY"); 
    c.setFirstResult(start); 
    c.setMaxResults(length); 
    List<TableClass> tableClasslist = c.list(); 
    return tableClasslist ; 
} 
+0

Dziękuję za pomoc. Szukałem rozwiązania JPA, ale DataNucleus usunął WZP z tagów pytań. Użyłem tagu hibernacji, aby wyrazić, że Hibernate jest moim dostawcą pomocy. – Mariusz

Powiązane problemy