Tôi sử dụng PagingAndSortingRepository và phương thức findAll (Pageable pageable) để phân trang dữ liệu của tôi. Tôi nghĩ rằng không có cách nào để cung cấp bất kỳ điều kiện nào. Ví dụ đôi khi tôi muốn chọn địa chỉ và phân trang nơi thành phố = NY. Có cách nào để cung cấp điều kiện và phân trang đồng thời không?Làm cách nào để kết hợp phân trang với truy vấn tiêu chí trong JPA dữ liệu mùa xuân?
Trả lời
Các PagingAndSortingRepository
chỉ cần thêm các phương pháp CRUD rất cơ bản trong chế độ phân trang. Khi mô tả reference documentation, bạn có thể chỉ cần thêm tham số Pageable
vào bất kỳ phương thức truy vấn nào bạn xác định để đạt được phân trang của truy vấn này.
interface CustomerRepository implements Repository<Customer, Long> {
Page<Customer> findByLastname(String lastname, Pageable pageable);
List<Customer> findByFirstname(String firstname, Pageable pageable);
}
Phương pháp đầu tiên sẽ trả về một Page
chứa siêu dữ liệu trang như tổng các yếu tố có sẵn vv Để tính toán dữ liệu này nó sẽ kích hoạt một truy vấn số bổ sung cho các truy vấn nguồn gốc. Phương thức truy vấn thứ hai trả về tập kết quả lát cắt đơn giản mà không có truy vấn đếm được thực hiện.
Đối Pagination bạn cần 2 phương pháp như getCount (pageable pageable) và FindAll (pageable pageable)
Bằng cách sử dụng chức năng này trong Hibernate, tuy nhiên, là tầm thường. Nếu bạn có bất kỳ truy vấn HQL bạn chỉ có thể làm điều này:
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;
}
Tương tự như vậy, nếu bạn có một truy vấn Tiêu chuẩn, đó là một cách hiệu quả điều tương tự:
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 ;
}
Cảm ơn bạn đã trợ giúp. Tôi đã tìm giải pháp JPA nhưng DataNucleus đã loại bỏ JPA khỏi các thẻ của câu hỏi. Tôi đã sử dụng thẻ ngủ đông để thể hiện rằng Hibernate là nhà cung cấp kiên trì của tôi. – Mariusz
- 1. Tìm nạp JPA dữ liệu mùa xuân
- 2. JPA dữ liệu mùa xuân và QueryDSL
- 3. Truy vấn JPA để chọn dựa trên tiêu chí cùng với việc phân trang
- 4. Dữ liệu mùa xuân JPA và bảo mật mùa xuân: lọc theo cấp cơ sở dữ liệu (đặc biệt là để phân trang)
- 5. Dữ liệu mùa xuân MongoDB - Tiêu chí API OrOperator không hoạt động đúng cách
- 6. Truy vấn phức tạp với trình tạo tiêu chí JPA
- 7. Dữ liệu JPA Spring "OR" truy vấn
- 8. Làm thế nào để thêm QueryHints trên phương pháp JPA dữ liệu mùa xuân mặc định?
- 9. JPA 2 + API tiêu chí - Xác định truy vấn phụ
- 10. Làm thế nào để "đặt hàng bằng chức năng tổng hợp" trong dữ liệu mùa xuân?
- 11. mùa xuân dữ liệu JPA áp dụng phân loại, pagination cùng với một mệnh đề where
- 12. Tiêu chí Mongo mùa xuân truy vấn hai lần cùng một trường
- 13. mùa xuân dữ liệu JPA: Tạo một kho trừu tượng
- 14. Boot-đóng đai mùa xuân dữ liệu JPA không XML
- 15. JPA 2 Câu hỏi Tiêu chí Truy vấn
- 16. Tiêu chí/Tiêu chí kiểu JPA Các truy vấn xây dựng từ Hibernate Session
- 17. Truy vấn được đặt tên JPA và API tiêu chí?
- 18. Làm thế nào để kích hoạt LockModeType.PESSIMISTIC_WRITE khi tìm kiếm các thực thể với JPA dữ liệu mùa xuân?
- 19. Dữ liệu liên kết và dữ liệu mùa xuân
- 20. Cách viết truy vấn này bằng truy vấn Tiêu chí JPA?
- 21. Tổng số hàng cho phân trang bằng cách sử dụng API tiêu chí JPA
- 22. Truy vấn MongoDB mùa xuân sắp xếp
- 23. Tiêu chí JPA 2 với 3 bảng
- 24. mùa xuân dữ liệu JPA và Querydsl để lấy tập hợp con của các cột bằng đậu/constructor chiếu
- 25. JPA dữ liệu mùa xuân Ví dụ đơn giản với MySql và Maven
- 26. Làm thế nào để bạn "OR" tiêu chí với nhau khi sử dụng một truy vấn tiêu chí với hibernate?
- 27. Làm cách nào để plugin Grails Export hoạt động đúng với truy vấn tiêu chí?
- 28. Truy vấn tiêu chí Hibernate nhiều tiêu chí
- 29. JPA dữ liệu mùa xuân: Làm thế nào để truy vấn trả về đối tượng không phải đối tượng hoặc danh sách đối tượng?
- 30. JPA dữ liệu mùa xuân giống như dự án không phụ thuộc vào Spring
Xin chào @Olivier with the Pageagle tôi không thấy nơi để chỉ định 'offset',' PageRequest' chỉ chấp nhận 'page' và' size'. tôi không thực sự thấy lý do tại sao tôi phải làm 'trang * kích thước' để có được' bù đắp' của tôi. có cách nào để sử dụng 'offset' trái ngược với' page' không? –
Lý do 'PageRequest' cho thấy' page' và 'size' là chỉ' offset' là không đủ vì bạn vẫn cần 'size'. Khái niệm về phân trang thường ngụ ý một lượt xem trang tập trung vào dữ liệu, đó là những gì chúng tôi thể hiện ở đây. Nhưng không có gì ngăn cản bạn khỏi việc thực hiện của riêng bạn 'Pageable' mà làm việc với offsets và kích cỡ. –
Cách chúng tôi có thể sử dụng Phân chia với API truy vấn? –