gpt4 book ai didi

jpa - 在 JPA 中映射 i18n 表

转载 作者:行者123 更新时间:2023-12-04 16:12:47 26 4
gpt4 key购买 nike

我正在尝试使用 JPA 从数据库(60 个表)中映射表。我正在为多语言应用程序执行此操作,因此每条数据都必须以多种语言提供。

我的数据库表结构是这样的。我有一个 Region 表,它与 RegionLanguage 表相关。 RegionLanguage 表实际上以不同语言保存了该区域的描述。你可能想看看这张图:

enter image description here

当谈到 JPA 时,我发现很难以需要尽可能少的关联的方式对其进行映射。我曾尝试使用 Secondary table 概念,但在某些情况下会失败,因为这是 @OneToMany 关系。最好,我正在考虑一种解决方案,可以使这两个表显示为单个对象。

感谢您的帮助。

提前致谢。

最佳答案

我不确定我是否理解这个奇怪的图表...... RegionLanguage 有某种指向 Region.id 的外键,我接受吗?如果 Region 只有一列(如“图表”所示),您可以只映射“RegionLanguage”,并且您将只有一个实体——不会丢失任何信息;)。

但说真的,你希望它如何映射?你想拥有这样的东西:

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。我不确定 Region 表在总体方案中的用途。我想这只是为了对语言进行分组......我想象这个“模型”瑞士(一个“区域”4 种语言)......但是你将如何处理在多个区域使用的语言?您是否要使用多种法语、英语等语言(每个地区一种)并且所有数据都乘以这些语言??

我知道你不会问这个......我只是认为你对这个问题过于简化了你的数据结构......以至于很难猜测你真正想要实现的目标。

无论如何,如果你想使用字符串列表方法,你可以试试这个:
  @ElementCollection
@CollectionTable(name="RegionLanguage",
joinColumns=@JoinColumn(name="regionID") // or whatever... it's not on your diagram.
)
@Column(name="langage")
private List<String> langages;

我仍然不明白为什么要将两个表放入一个实体中...如果它是“只读”数据,您可以尝试创建一个 View 并映射它——总是一个“出路”;)。但在我看来,它(实际上是两者)有点过于复杂——它将来会咬你。我的建议是使用“简单的一对多映射”。

关于jpa - 在 JPA 中映射 i18n 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7231699/

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