[英]How to map this relationship in Hibernate?
我有2張桌子:
表Data
: id
,還有許多字段。 其中一些字段是“代碼”,它們引用下一張表中的多語言值,例如country_code
, continent_code
。
Thesaurus
包含多語言代碼,其code_type
: code
, code_type
, language
, text
。 對於一個code_type
代碼是唯一的,但是相同的代碼可能多次具有不同的'code_type'值。
該表中的示例數據:
code code_type language text
----------------------------------------------------
USA CNT EN United States
USA CNT FR Etats-Unis
FR CNT EN France
FR CNT FR France
FR LNG EN French
FR LNG FR Français
因此,數據表的country_code
列可能包含'FR'
或'US'
,而language code
列也可能包含'FR'
。 隱含的是country_code
列包含用於國家/地區的'CNT'
類型的代碼,而language_code
列包含用於語言的“ LNG”類型的代碼。
如何在Hibernate中對此進行映射,以便可以在Java代碼中執行類似的操作:(假設應用程序的當前語言環境是美國英語)
myData.getCountryCode(currentLocale.getlanguage()); --> returns 'France'
myData.getLanguageCode(currentLocale.getlanguage()); --> returns 'French'
請注意,我無法修改數據庫架構,這不是我自己設計的!
您可以在Data類中包含兩個用於實現同一抽象類的不同POJO的列表,用於國家代碼和語言代碼(以及字段代碼,語言和文本)。 要映射它們,您可以將“繼承映射”與單表策略結合使用,並將code_type列定義為“ discriminator”列。
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "code_type", discriminatorType = DiscriminatorType.STRING)
然后,您可以按以下方式查詢語言代碼或國家/地區代碼
myData.getCountryCode(currentLocale.getlanguage()).getText(); --> returns 'France'
myData.getLanguageCode(currentLocale.getlanguage()).getText(); --> returns 'French'
您可以將code,code_type和language列定義為唯一。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.