JPA单个外键ID,用于引用两个(或更多)表

时间:2017-05-23 15:59:49

标签: java jpa

真的很简单的问题。这是在Java上使用JPA,我要做的是有一个表和列,可以引用两个表之一。为了使这个更清楚,我可以有一个用户'桌子和'TempPerson'表。我不想污染我的用户表(因为我也将其用于安全性,还有其他信息)。现在假设我有第三个名为“游戏”的桌子。现在当有人在某场比赛中对某人进行比赛时,他们就可以在系统中与某人比赛。可以创建和使用用户或他们可以为TempPerson键入名称和新条目的人员。因此,player2(或player1)的游戏将是User.id或TempPerson.id的映射ID。现在我明白可能需要将确定列放入游戏以确定Id的用途,但我希望JPA能以某种方式满足它。任何想法都会有所帮助,我可以使用继承但不确定它。

这是另一个例子:

假设我有一张表格,其中包含有关images =>的信息。 id,分辨率,宽度,高度,位置,存储桶.... id_in_the_table_where_used,table_name_of_where_used。现在,这一个表可以保存配置文件,地点等的图像...而配置文件,地方将有一个id引用图像表,但我也希望图像表有一个ID回到图像的位置使用,哪个表和哪个id正在使用它。

几乎我被问到了一对多的桌子'解。虽然我可以在表之间有很多等等......虽然许多DBA可能会诅咒这个想法,但似乎有些过于简单。它确实最小化了查询,表格数量......等等

提前致谢

1 个答案:

答案 0 :(得分:0)

可以使用单个FK来定位多个表。您必须使用@JoinColumn作为

@Entity
public class User{

 @OneToOne
 @JoinColumn("universalId", targetEntity=Avatar.class)
 private Avatar

 @oneToMany
 @JoinColumn("universalId", targetEntity=Log.class)
 private List<Log> logs;

}

这将使用universalId表的User列来查找AvatarLog表中的相关记录

然而,这是相反的反模式,当例如universalId必须更改等时会导致很多后果.1列= 1 FK - 就这样。