gpt4 book ai didi

java - 如何在Hibernate中映射这种关系?

转载 作者:太空宇宙 更新时间:2023-11-04 08:51:15 25 4
gpt4 key购买 nike

我有 2 张 table :

数据:id,加上许多字段。其中一些字段是“代码”,引用下表中的多语言值,例如 country_codeContinental_code

包含多语言代码的表同义词库,包含以下列:codecode_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'语言代码 列也可能包含 'FR'country_code 列隐含包含国家/地区 'CNT' 类型代码,language_code 列包含语言“LNG”类型代码。

如何在 Hibernate 中映射它,以便我可以在 Java 代码中执行类似的操作:(假设应用程序的当前区域设置是美国英语)

myData.getCountryCode(currentLocale.getlanguage()); --> returns 'France'
myData.getLanguageCode(currentLocale.getlanguage()); --> returns 'French'

请注意,我无法修改数据库架构,该架构不是我自己设计的!

最佳答案

您可以在国家/地区代码和语言代码(包含字段代码、语言和文本)的数据类中拥有两个不同 POJO 的列表,它们实现相同的抽象类。要映射它们,您可以使用单表策略的“继承映射”,并将 code_type 列定义为鉴别器列。

    @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_type 和语言列定义为唯一。

有关详细信息,请参阅 hibernate“映射继承”部分 here

关于java - 如何在Hibernate中映射这种关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3287908/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com