Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在JPA中映射i18n表_Jpa_Internationalization_Locale_Multilingual - Fatal编程技术网

在JPA中映射i18n表

在JPA中映射i18n表,jpa,internationalization,locale,multilingual,Jpa,Internationalization,Locale,Multilingual,我正在尝试使用JPA从数据库(60个表)映射这些表。我这样做是为了一个多语言的应用程序,因此每一段数据都必须使用多种语言 我的数据库表结构是这样的。我有一个Region表,它与RegionLanguage表相关。RegionLanguage表实际上包含该区域的不同语言描述。您可能需要查看此图: 当涉及到JPA时,我发现很难以一种需要尽可能少的关联的方式来映射它。我曾尝试使用辅助表概念,但在某些情况下失败了,因为这是一种@OneToMany关系。最好是,我正在考虑一个解决方案,使这两个表显示为一

我正在尝试使用JPA从数据库(60个表)映射这些表。我这样做是为了一个多语言的应用程序,因此每一段数据都必须使用多种语言

我的数据库表结构是这样的。我有一个Region表,它与RegionLanguage表相关。RegionLanguage表实际上包含该区域的不同语言描述。您可能需要查看此图:

当涉及到JPA时,我发现很难以一种需要尽可能少的关联的方式来映射它。我曾尝试使用辅助表概念,但在某些情况下失败了,因为这是一种@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到RegionLanguage。我不确定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;
@ElementCollection
@CollectionTable(name=“RegionLanguage”,
joinColumns=@JoinColumn(name=“regionID”)//或者其他什么……它不在您的图表中。
)
@列(name=“langage”)
私人列表语言;

我还是不明白你为什么要把两个表放在一个实体中。。。如果它是“只读”数据,您可以尝试创建一个视图并映射它——始终是一个“出路”;)。但在我看来,这(事实上是两者)有点过于复杂了——它将来会咬你的。我的建议是只使用“简单的一对一映射”。

您找到解决此问题的方法了吗?如果是的话,你介意分享一下吗(作为回答)?我们面临着同样的问题,还没有找到一个好的解决方案(大多数结果是N+1查询,这是我们绝对不想要的)。你在使用哪个JPA提供商?我不完全理解为什么区域和区域语言之间的简单@OneToMany关联不适用于你?