Używam metody PagingAndSortingRepository i findAll (Pageable pageable) do stronicowania moich danych. Myślę, że nie ma sposobu na zapewnienie jakiegokolwiek warunku. Na przykład czasami chcę wybrać adresy stronicowania, gdzie miasto = NY. Czy istnieje sposób na jednoczesne zapewnienie stanu i stronicowania?Jak połączyć paginację z zapytaniem o kryteria w Spring Data JPA?
Odpowiedz
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.
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 ;
}
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
- 1. Jak korzystać z audytu w JPA/Spring-Data JPA?
- 2. Porównaj podmioty Data w JPA Kryteria API
- 3. Kryteria API JPA - Dopasowanie do listy w Spring Data Specyfikacje JPA
- 4. Spring Data JPA + JpaSpecificationExecutor + EntityGraph
- 5. Jak działa @CreatedBy w Spring Data JPA?
- 6. Spring Data (JPA) - używanie generycznych w @Query
- 7. Czy mogę połączyć definicję @Query z danymi technicznymi w jednej z metod repozytorium Spring Data JPA?
- 8. spring-data-jpa call Przechowywana procedura
- 9. Kryteria JPA Query odrębny
- 10. Nieobsługiwane dla operacji DML z zapytaniem o aktualizację JPA
- 11. Jak rozwiązać problem LazyInitializationException w Spring Data JPA?
- 12. Spring + Thymeleaf - jak zaimplementować paginację dla listy
- 13. Potrzebujesz pomocy w tworzeniu zapytania o kryteria JPA
- 14. Spring Data JPA, czyli jak zdobyć ostatnią stronę poprzez stronę
- 15. Spring Data JPA prosty przykład sieciowy z MySql i Maven
- 16. Jak zrobić paginację z mybatis?
- 17. Łączenie dwóch elementów tabeli w Spring Data JPA
- 18. Metody Crud w warstwie usług przy użyciu Spring Data JPA
- 19. Kryteria JPA zwracają stronę i suma
- 20. Zapytania o kryteria w EJB 3
- 21. Porwanie Jsona z zapytaniem o Ajax Jquery
- 22. Spring Data JPA - format ZonedDateTime do serializacji json
- 23. AutoIncrement Id PostgreSQL i Spring Boot Data JPA
- 24. Kryteria hibernacji: TERAZ() <data + 1 dzień
- 25. Praca ze Spring Data JPA, Hibernate i wieloma menedżerami transakcji: Nie zdefiniowano fasoli o nazwie "transactionManager"
- 26. Spring Data JPA and spring-security: filtruj na poziomie bazy danych (szczególnie w przypadku stronicowania)
- 27. JPA Kryteria API IN wyrażenie Lista parametrów
- 28. jak leniwe ładowanie kolekcji przy użyciu spring-data-jpa, z hibernacją, z aplikacji konsolowej
- 29. Jak zrobić paginację z mangustą?
- 30. W jaki sposób używasz repozytoriów Spring Data JPA i Spring Data Elasticsearch w tej samej klasie domeny w aplikacji Spring Boot?
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'? –
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. –
W jaki sposób możemy używać narzędzia Pagivation with Query API? –