在JPA

2011-08-29 54 views
6

中映射國際化表格我試圖使用JPA映射來自數據庫(60表)的表。我正在爲多語言應用程序做這件事,因此每件數據都必須以多種語言提供。在JPA

我的數據庫表結構是這樣的。我有一個區域表,它與RegionLanguage表相關。 RegionLanguage表實際上擁有不同語言的該地區的描述。你可能想在這個圖來看看:

enter image description here

當涉及到JPA,我覺得很難給它,要求儘可能少協會盡可能的方式映射。我曾嘗試使用次表概念,但在某些情況下失敗,因爲這是@OneToMany關係。最好是,我正在考慮一個解決方案,使這兩個表格顯示爲一個單一的對象。

您的幫助表示讚賞。

在此先感謝。

+2

您是否找到了解決此問題的解決方案?如果是這樣,你介意分享它(作爲答案)嗎?我們面臨着同樣的問題,還沒有找到一個很好的解決方案(大多數結果是N + 1查詢,我們絕對不想這麼做)。 – wimvds

+0

您正在使用哪個JPA提供程序? – siebz0r

+0

我不完全理解爲什麼Region和RegionLanguage之間的簡單@OneToMany關聯不適合您? –

回答

0

我不確定我是否理解這個奇怪的圖表... RegionLanguage有一些指向Region.id的某種外鍵,我接受它?如果區域只有一列(如'圖表'所示),則只需簡單映射'區域語言',只需要一個實體即可 - 不會丟失信息;)。

但嚴重的是,你會如何映射它?你想有這樣的事情:

class Region { 
//.. the missing fields not shown in diagram 
    List<String> languages; // take only language to avoid creating separate entity for region language 
} 

或者是這樣的:

class RegionInnerJoinRegionLanguage { 
// all fields from Region 
// all fields from RegionLanguage 
} 

你怎麼不說表的其餘部分與您的i18n表加入任何情況。從你的描述中,我猜測,所有的表格都有fk到RegionLanguage。我不確定區域表在什麼宏觀方案中被使用。我想這只是對語言進行分組......我想這是'模型'瑞士(一個地區的4種語言)......但是,你會用幾種地區的語言做什麼?你會有幾種法語,英語等語言(每個地區都有一種語言),並且所有數據都乘以每種語言?

我知道你不會問這個問題......我只是覺得你對這個問題的數據結構過於簡單......太難以猜測你真正想達到的目標了。

在任何情況下,如果你想使用的字符串的方法列表,你可以試試這個:

@ElementCollection 
    @CollectionTable(name="RegionLanguage", 
     [email protected](name="regionID") // or whatever... it's not on your diagram. 
) 
    @Column(name="langage") 
    private List<String> langages; 

我還是不明白,你爲什麼要把這兩個表成一個單一的實體.. 。如果它是'只讀'數據,你可以嘗試創建一個視圖並將其映射 - 總是一個'出路';)。但事實上,它們(其實都是)過於複雜,在我看來 - 將來會咬你的。我的建議是「簡單的OneToMany映射」。