2013-03-18 105 views
2

我有許多表與表客戶端有一對一的關係,由Hibernate映射。如何在Java中使用One to One關係創建唯一數據庫記錄文件?

我需要後,每個線程使用這些表的選擇,以創造獨特的客戶端的文件。

各表(如發票,服務等)也將包含在文件中,但是客戶端列表之後(政府要求,不要問爲什麼...)。

我想到了3點不同的方式來做到這一點:

方法1:使用一個HashSet

我的客戶對象添加到HashSet的每個選擇之後。可悲的是,這個解決方案不具有可擴展性,因爲表B可能有數百萬個獨特的記錄,並可能導致OutOfMemory錯誤。

方法2:使用視圖

我還可以創建連接表視圖。問題是這些選擇有許多複雜的規則,並且經常發生變化。維護將是一場噩夢,因爲它需要我改變程序和視圖。

方法3:使用臨時表

我可以創建一個臨時表來存儲在每個表中找到客戶端對象,那麼該表進行選擇。

方法3似乎是,到目前爲止,最好的解決辦法,但我不知道是否有更好的方法來做到這一點。我怎樣才能改進我的設計?

+0

方法3對我來說很不錯。另一種方法是分佈式緩存。 – kan 2013-04-04 19:44:43

回答

0

我以錯誤的視角看待問題。

我迷戀上選擇數據庫和創建不同的文件(即一個發票,一個用於服務等),每個線程的過程中,再加入所有的文件到一個單一的一個。當然,這是一個解決方案,但它會引發上述問題。

這樣做的第二種方法是簡單地選擇數據庫中的記錄(線程和全部)。然後,可以使用模板引擎(如FreeMarker,Chunk ...)或自定義格式化程序創建該文件。

有使用線程這樣做(即使run()方法returnsa無效)的許多方面:

  • 使用的ExecutorService的一個FutureTask提供獲得模型的列表;
  • 使用帶有同步方法的靜態對象來保存模型;
  • 使用依賴注入將所述對象注入Runnable對象,使其成爲Singleton。
相關問題