JPA目标实体类型基于列值

时间:2010-10-18 20:22:13

标签: java hibernate jpa

我正在尝试将一些旧代码从手工制作的持久性转移到Hibernate。这里的问题是一个特殊的映射,其中目标实体类型/表由列值定义。

示例数据库表:

表“关系”:

  • id - 我的主键
  • parentType - 指定父类型的char(例如'I'表示Item表中的对象,Category表中的'C')
  • parentId - parentType表中的主键
  • childType - 指定子类型的char
  • childId - 孩子表中的主键

问题在于所有这些类型(例如Item或Category)都具有相同的抽象父级,称为GenericObject,它没有自己的表。继承是TABLE_PER_CLASS。

糟糕的是,通过parentId或childId,您无法告诉类型,这些表中的id不是唯一的。您需要查看parentType和childType。

现在我如何在Hibernate中映射这种疯狂?我希望将父和子映射到GenericObject变量,该变量实际上是Item或Category的实例。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

当目标实体按类型和非唯一ID标识时,Hibernate有@Any@ManyToAny注释。

我认为在您的情况下,由于父母和孩子都是通过这种方式识别的,因此您需要创建Relation实体,其中父母和子女与@Any注释关系。