2009-02-06 33 views
9

Tôi đang cố gắng để làm pagination với Hibernate sử dụng setFirstResult()setMaxResults() nhưng tôi không nhận được kết quả mong đợi khi thiết lập các kết quả đầu tiên để 0.setFirstResult Hibernate() của vấn đề với trình điều khiển JDBC Oracle

Khi làm như sau :

Query query = session.createQuery(queryString); 
query.setFirstResult(0); 
query.setMaxResults(30); 
List list = query.list(); //list.size() returns 10 

nhưng nếu tôi đặt kết quả đầu tiên đến 1 (hoặc bất cứ điều gì khác hơn 0 cho rằng vấn đề):

query.setFirstResult(1); 
query.setMaxResults(30); 
List list = query.list(); //list.size() returns 30 

Tôi đọc đây là một lỗi đã biết trong trình điều khiển jdbc, nhưng tôi đã tìm kiếm một giải pháp và dường như tôi không thể tìm thấy nó. Có ai chạy trên bất cứ điều gì tương tự và tìm thấy một sửa chữa cho nó?

Trả lời

13

Rõ ràng là thêm setFetchSize(). Vì vậy, một cái gì đó như thế này hiện đang làm việc một cách hoàn hảo:

query.setFirstResult(0); 
query.setMaxResults(30); 
query.setFetchSize(30); 
List list = query.list(); //list.size() now returns... wait for it... 30 
+3

Bạn tuyệt vời! Tôi vừa có vấn đề chính xác này và 'setFetchSize()' đã sửa nó ngay lập tức. – Nick

1

Giải pháp khác là để thực hiện riêng bạn Oracle Dialect:

public class Oracle10gDialectLimitBugfix extends Oracle10gDialect { 
    @Override 
    public boolean forceLimitUsage() { 
     return true; 
    } 
} 

Xem https://forum.hibernate.org/viewtopic.php?p=2379096

UPDATE: Nó dường như được cố định trong Oracle 11.2.0.1 .0

Các vấn đề liên quan