Jpa 二级表和复合键分布在两个表上的子实体

Jpa 二级表和复合键分布在两个表上的子实体,jpa,persistence,eclipselink,Jpa,Persistence,Eclipselink,在为国际化数据库设计选择一种方法进行了大量辩论之后,我决定为每个需要翻译的表设置两个表。在下面的例子中,我在ORM方面遇到了一些问题 因此,我有以下表格: cat cat_t subcat subcat_t ------ ------- ---------- ------------ id (pk) cat_id(pk,fk) id(pk)

在为国际化数据库设计选择一种方法进行了大量辩论之后,我决定为每个需要翻译的表设置两个表。在下面的例子中,我在ORM方面遇到了一些问题

因此,我有以下表格:

cat          cat_t               subcat            subcat_t 
------       -------             ----------        ------------
id (pk)      cat_id(pk,fk)       id(pk)             subcat_id(pk,fk)
             locale(pk)          cat_id(fk)         locale(pk)
             name                                   name
@实体
@表(name=“cat”)
@第二个表(name=“cat\t”,
pkJoinColumns=@PrimaryKeyJoinColumn(name=“cat\u id”,
referencedColumnName=“id”))
@IdClass(TranslationKey.class)
公共类类别{
@身份证
私人长id;
@身份证
@列(table=“cat\t”)
私有字符串区域设置;
@列(table=“cat\t”)
私有字符串名称;
@OneToMany(fetch=FetchType.LAZY)
私有列表子类别;
//接球手和接球手
}
@实体
@表(name=“subcat”)
@第二个表(name=“subcat\t”,
pkJoinColumns=@PrimaryKeyJoinColumn(name=“subcat\u id”,
referencedColumnName=“id”))
@IdClass(TranslationKey.class)
公共类子类别{
@身份证
私人长id;
@身份证
@列(table=“subcat\t”)
私有字符串区域设置;
@列(table=“subcat\t”)
私有字符串名称;
@列(name=“cat_id”)
私人长类别;
//接球手和接球手
}
public类TranslationKey实现可序列化{
私人长id;
私有字符串区域设置;
//接球手和接球手
}
我的目标是让子类别只回拉父语言环境的子类别。我想我有一些选择,包括,分别查询子类别,使字段变为临时字段,或者将所有内容(所有语言的所有子类别),然后过滤掉我想要的内容

我在
@JoinColumn
中遇到的问题是,对于两个cat can子类别,区域设置都是辅助表的一部分,因此当我尝试
referenceColumn
时,可能不允许这样做,因为它不在同一个表中?。我正在使用EclipseLink,但我并没有真正与JPA提供商联系在一起


非常感谢任何帮助/指导

cat似乎与cat\t有一对多的关系,因为对于单个cat条目,cat\t中可能有许多行。这对于单个实体来说并不理想,因为这意味着您将拥有共享数据的实例,并且如果您进行更改,将带来无尽的麻烦

使更新成为可能的更好方法是将cat和cat映射到单独的实体,其中cat有一组cat?本地实例。映射到cat的实体可以使用本地及其指向cat的多个返回指针作为其Id:

@Entity
@IdClass(TranslationKey.class)
public class Local {
  @ID
  private String locale;
  @ID
  @ManyToOne
  private Cat cat;
}

public class TranslationKey{
  string local;
  long cat;
}

克里斯,谢谢你说得对。我最后做的是为翻译表创建另一个实体,然后像您建议的那样在这个实体中添加这些实体。我的目标是让cat->subcat在一个实体中具有正确的语言环境,我仍然将这些属性保留在同一个实体中,但使用@Transient和typedquerys。我会考虑你的想法,用一个本地的代替,因为现在我有这些瞬态场,它可能会变得混乱。