我正在努力牢牢掌握欧文方面的概念。从我在这里找到的任何问题都无法得到清晰的图片。基本上我正在阅读Java EE JPA教程。它们具有以下数据库架构,其中PLAYER
和TEAM
具有多对多关系
还说明了
- 一名球员可以参加许多球队。
- 一支球队可以有很多球员。
PLAYER
和TEAM
之间存在多对多关系。
到目前为止非常直截了当。但是当进入编码部分时,它们会使TEAM
成为关系的拥有方。
public class Team {
private Collection<Player> players;
@ManyToMany
@JoinTable(
name = "PERSITENCE_ROSTER_TEAM_PLAYER",
joinColumns = @JoinColumn(name = "TEAM_ID", referencedColumnName = "ID"),
inverseJoinColumns = @JoinColumn(name = "PLAYER_ID", referencedColumnName = "ID")
)
public Collection<Player> getPlayers() {
return players;
}
}
public class Player {
private Collection<Team> teams;
@ManyToMany(mappedBy = "players")
public Collection<Team> getTeams() {
return teams;
}
}
我理解代码没有问题。我无法理解的是:
1。如何确定
TEAM
是拥有方?2。如果在这种情况下
PLAYER
成为拥有方,会不会有任何区别?
也从教程中说明。
“指定
@JoinTable
的实体是该网站的所有者 关系,因此TEAM
实体是与PLAYER
实体的关系的所有者。“
话虽如此:
第3。上述陈述会使我的第二个问题成立吗?这意味着除了决定的哪一方使用
@JoinTable
注释构建拥有方之外,没有决定因素?
答案 0 :(得分:6)
- 如何确定TEAM是拥有方?
醇>
对于双向场景中的ManytoMany关系,可以任意选择关系的所有者,但考虑到目的,您应该选择首先检索更有意义的实体或根据您更多使用的实体目的。您只需要记住,许多人总是需要成为ManyToOne场景中的拥有者。
- 在这种情况下,如果PLAYER成为拥有者,会不会有任何不同?
醇>
不,它不会因为这种关系是双向的。
- 上述陈述是否会使我的第二个问题成立?意味着除了你决定的那个之外没有决定因素 使用@JoinTable注释创建拥有方?
醇>
是的,@ JoinTable必须作为其他一些注释在关系中的所有者。选择所有者后,您应该在该类中添加注释。
还要考虑应用时需要的级联操作,以及是否需要在关系的两侧。
答案 1 :(得分:2)
AFAIK你可以确定拥有方。在m:n场景中选择任何特定方面没有错。
所以,回答你的问题:
- 如何确定TEAM是拥有方?
醇>
我认为是随意的。
2。在这种情况下,如果PLAYER成为拥有者的一方会有什么不同吗?
没有任何区别
3。上述陈述会使我的第二个问题成立吗?这意味着除了使用@JoinTable注释决定拥有哪一方之外,没有决定因素?
是
答案 2 :(得分:1)
根据你的问题,你使用ManyToMany关系双向。这是我的答案,
问题1
问题2
问题3