我有一個數據庫有3個表。主表是Contract
,它與來自兩個表的鍵對配對:Languages
和Regions
。 每一對都是獨一無二的,但它是可能的一個合約將有以下對IDS:休眠三表很多很多
{ (1,1), (1,2), (2,1), (2,2) }
今天,三個表經由連接實體鏈接稱爲ContractLanguages
。它包含一個序列ID,以及來自三個表的id的三元組。 但是,在足夠大的合同中,這會導致嚴重的性能問題,因爲休眠環境會產生數量驚人的對象。 因此,我們想刪除這個連接實體,以便合約將保存這些對的一些集合。
我們建議的解決方案:創建一個包含Language和Region id的@embeddable
類,並將它們存儲在Contract實體中。 這個背後的想法是,有相對少數的語言和地區。 我們假設hibernate管理這些對的列表並且不會創建重複項,因此大大減少了創建的對象的數量。
但是,我們有以下問題:
- 請問這個解決方案的工作?冬眠會知道創建正確的對象嗎?
- 假設解決方案有效(鏈接已正確創建),hibernate會優化對象創建以停止創建重複對象嗎?
- 如果此解決方案不起作用,我們如何解決上述問題而無需連接實體?
是否可以保持連接實體,但採用延遲加載?如果我正確地理解你,每個合同可能只有有限數量的這種連接實體 - 你在使用時是否需要這些實體?多個合同?除此之外,您可以使用查詢來僅從連接表中加載id(例如'SELECT connection.region.id,connection.language.id,... FROM ContractLanguages connection ...')並手動創建對象需要。 – Thomas
看看我的網站上的帖子,也許它會很有用:http://itmuslim.org/blog/2014-03-13-629 – DmitryKanunnikoff
@Thomas我確實需要他們,因爲我在我的系統中持有很多合同一次,他們每個人可以有完全相同的對,所以我試圖實現的是隻持有一對實體,所有的合同都會有一套對這個實體的引用。我不確定我是否理解你的第二個建議,請你詳細介紹一下。 – DiSol