2011-09-21 78 views
2

我們正在使用跨多個頁面的嚮導的Seam對話,其中一些屏幕會爲用戶選擇加載大量數據(可以是幾千條記錄)。 Hibernate會話保留所有內容,這對內存使用和性能都是一個問題(因爲刷新需要幾秒鐘的時間)。Seam會話中的休眠會話變得太大

是我們加載數據時唯一的選擇嗎?還是有更好的方法來管理它?

回答

0

如果您的屏幕在會話中保留了幾千條記錄(顯然取決於這些記錄的大小)長時間,當然,您將遇到問題。

如何解決問題取決於很多因素。

  • 它可以存儲在一個地方的應用程序範圍的數據?
  • 你可以緩存它在休眠級別(如ehcache),或在...
  • ...一個外部緩存位於應用程序和數據庫之間?
  • 是否需要保留全部這些記錄中的數據,還是隻需要一個小子集(如ID和標籤)就足夠了?

等等

+0

使用ehcache將數據緩存在Hibernate級別,但它在加載時仍然會在Hibernate會話中結束。我們確實需要所有的數據。目前我們正在嘗試使用僅存在於服務調用周圍的第二個Hibernate會話,但不確定它是否是最佳選項。 – David

0

您不必保存一切在交談。

只保留用戶插入的數據併爲查詢使用Event範圍,並在每次訪問嚮導頁面時進行查詢。

只是不保留查詢的結果。

+0

查詢結果沒有放入對話中,Hibernate會話保持結果,Seam保持Hibernate會話處於對話狀態。 – David