gpt4 book ai didi

java - JPA 单个外键 ID 引用两个(或更多)表

转载 作者:太空宇宙 更新时间:2023-11-04 11:27:59 25 4
gpt4 key购买 nike

确实是一个简单的问题。这是在 Java 上使用 JPA,我要做的是拥有一个带有 和 列的表,可以引用两个表之一。为了使这一点更清楚,我可以有一个“User”表和一个“TempPerson”表。我不想污染我的用户表(因为我也使用它来确保安全,而且还有其他信息)。现在假设我有第三个表,名为“游戏”。现在,当有人与某人比赛时,他们已经可以与系统中的某人比赛了,即。用户或某人可以在其中键入名称,并创建并使用 TempPerson 的新条目。因此,player2(或player1)的游戏将被映射到 User.id 或 TempPerson.id。现在我明白,可能需要在 Game 中放置一个确定列来确定 Id 的用途,但我希望 JPA 能够以某种方式满足它。任何想法都会有帮助,我可以使用继承,但不确定。

这是另一个例子:

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

几乎有人问我“一对多表”解决方案。虽然我可以在表之间有很多东西等等...对于如此简单的事情来说似乎有点过分了,尽管许多 DBA 可能会咒骂这个想法。它确实最大限度地减少了查询、表数量等...

提前致谢

最佳答案

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

@Entity
public class User{

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

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

}

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

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

关于java - JPA 单个外键 ID 引用两个(或更多)表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44139762/

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