簡體   English   中英

如何在Hibernate中映射這種關系?

[英]How to map this relationship in Hibernate?

我有2張桌子:

Dataid ,還有許多字段。 其中一些字段是“代碼”,它們引用下一張表中的多語言值,例如country_codecontinent_code

Thesaurus包含多語言代碼,其code_typecodecode_typelanguagetext 對於一個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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM