2008-09-17 49 views
1

的情況是這樣的:在使用UI之前加載Hibernate對象圖的最佳方法是什麼?

  • 您有已定義有些慵懶 裝載的 對象圖Hibernate的上下文。
  • 你想在你的用戶界面中使用 Hibernate對象,因爲 不需要在某處複製數據 。
  • 有不同的UI 需要不同的 數據量的上下文。
  • 的數據也是 大,只是急於加載整個 圖每次。

什麼是以可配置方式加載對象圖中所有適當對象的最佳方法,以便可以訪問它們而無需返回到數據庫以加載更多數據?

任何幫助。

回答

2

假設你有客戶,並且在某一時刻你必須對他的訂單進行一些操作,也許他的訂單有獎金。

然後,我會定義一個具有流暢的界面庫,讓我這樣說:

new ClientRepo().LoadClientBy(id) 
       .WithOrders() 
       .WithBonus() 
       .OrderByName(); 

有你有你需要的一切的客戶端。最好事先知道當前操作需要什麼。這樣你就可以避免不必要的數據庫訪問(你的團隊中的新開發人員通常會這樣做 - 調用一個屬性,而不知道它實際上是對數據庫的調用)

1

如果這是一個web應用程序,你使用的是Spring,那麼OpenSessionInViewFilter可以解決你的問題。

+1

這並不而不必回到解決問題」數據庫「,因爲這正是開放會話所要做的...... – jrudolph 2008-09-17 09:45:52

1

我們在項目中使用的方法是爲您擁有的每個視圖創建一個服務。然後視圖會爲您獲取此特定視圖所需的子圖,並始終嘗試減少發送到數據庫的sqls數。因此,我們使用大量連接來獲取n:1關聯對象。

如果您正在使用直接連接到數據庫的雙層桌面應用程序,則只需將對象保留下來並隨時自動加載其他數據。否則,你必須把它重新連接到會話和初始化你需要Hibernate.initialize(Object entity, String propertyName)

協會(內存,也許不是100%正確的)

相關問題