2010-12-04 72 views
2

我學習Hibernate和有關於我的POJO類 的設計我有一個類的目的地,幾個屬性,如問題關於Hibernate POJO類設計

private Set<AirTransport> airTransport; 
private Set<RoadTransport> roadTransport; 
private Set<TrainTransport> trainTransport; 

,因爲這些問題是refrence一些其他實體類,我的問題是當我將獲取我的目的地類時,我不希望這些參考被加載到內存中,以便稍後可以在用戶點擊任何一個鏈接(如airtransport)時獲取它們。以最佳方式實現。 我是休眠所以請糾正我哪裏我錯了。

Thnaks提前

+0

請勿將[關閉]添加到您的問題標題中。這意味着另一件事 - 當一個問題因與stackoverflow(或垃圾郵件)無關而關閉時,會自動添加`[closed]`。被接受的答案表明了問題被成功回答的事實。 – Bozho 2010-12-04 07:10:29

+0

+1 Thnaks的指針.. :) – 2010-12-04 07:53:23

回答

2

這被稱爲「延遲加載」。默認情況下,hibernate(和JPA)中的所有集合都會被懶惰地加載 - 也就是說,它們在被訪問之前不會被加載。所以默認情況下,你的對象不會獲取所有的數據。

但延遲加載有其複雜性。如果在休眠會話關閉時嘗試訪問集合,則會引發異常。而且看起來你會在用戶做出一些動作(點擊一個按鈕)之後需要這些集合。

對於這種情況,你有兩個選擇:

  • 當用戶點擊該按鈕

    ,你再次加載實體,並且初始化所需的集合。可以通過Hibernate.initialize(..)或通過在視圖中迭代它。請注意,會話通常在視圖呈現之前關閉,因此您可能需要OpenSessionInViewFilter

  • 根本不使用集合。無論如何,他們的行爲有限。使用HQL或標準API來獲取結果。這可以讓你有尋呼功能,而且你不會想到懶惰的問題

0

這就是所謂的懶在ORM世界獲取。閱讀教程here。您可能還想了解相關模式:Open Session in View

+0

感謝您的鏈接 – 2010-12-04 06:30:46