2015-10-18 77 views
0

我正在寫這個在我的手機上飛,所以原諒蹩腳的代碼示例。休眠分頁與____ToMany映射

我有實體用多對多關係:

@JoinTable(name="foo", @JoinColum="...",   @InverseJoinColumn="...") 
@ManyToMany 
List list = new ArrayList(); 

我想在一個分頁的方式來獲取他們的數據。

我知道關於setFirstResult和setMaxResults。有沒有辦法在映射中使用它?如在,我檢索對象,並獲得與內容相等的單個頁面的記錄數量與相應的偏移量。

我想我只是不清楚最好的方式來做到這一點。我可以手動使用hibernate標準來產生效果,但是我覺得缺少API。我有這個映射,我想看看是否有一種方法來以分頁的方式使用它。

PS。如果這不切實際,就說。另外,如果是這樣,我是否仍然可以使用映射將新條目添加到連接表中。如果實體是數據庫中的持久實體,但我沒有提取多個列表,我可以添加新的東西,當它保持級聯時,它將被添加到連接表中而不清除其他條目?

回答

0

作爲查詢一部分的實體之間的關係類型並不重要。有幾種方法可以解決這個問題。

  1. 如果你的數據庫支持它的查詢LIMIT關鍵字,你就可以用它來獲取數據集,假設你排序您的數據。請注意,如果您的數據在您的用戶在頁面之間導航時發生變化,您可能會看到一些重複或丟失了一些記錄。如果您的數據庫更改爲沒有LIMIT關鍵字的數據庫,那麼您將不得不重寫。

  2. 如果您需要凍結原始查詢時的數據,您需要使用第三方框架或編寫自己的代碼來獲取查詢的ID列表,然後拆分該列表並通過ID獲取分頁的子集。這對於任何數據庫都是可靠的。

Displaytag是我用過的數據分頁框架,因此我可以告訴你對於大型數據集很好。它也是這個問題的老式解決方案之一,不是擴展框架的一部分。 http://displaytag.sourceforge.net/11/tut_externalSortAndPage.html

表分揀機是我遇到的另一個。這個人使用JQuery並在一個查詢中獲取整個數據集,所以嚴格來說,它不符合「以分頁方式獲取數據」標準。 (這可能不適合大集合)。如果你已經在使用一個框架來看看該框架是否已經解決分頁 http://theopentutorials.com/examples/java-ee/jsp/pagination-in-servlet-and-jsp/

http://tablesorter.com/docs/

本教程可能會有所幫助 的Spring MVC提供了一個數據尋呼機 http://blog.fawnanddoug.com/2012/05/pagination-with-spring-mvc-spring-data.html

GWT提供了一個數據尋呼機: http://www.gwtproject.org/javadoc/latest/com/google/gwt/user/cellview/client/SimplePager.html

以下參考也可能有幫助:

JDBC Pagination 也指出: http://java.avdiel.com/Tutorials/JDBCPaging.html