这种多对多关系的“Owning Side”是如何确定的呢?

2024-01-10

我正在努力牢牢掌握业主方的概念。从我在这里发现的任何问题中都无法真正获得清晰的图片。基本上我正在学习 Java EE JPA 教程。他们具有以下数据库架构,其中PLAYER and TEAM具有多对多关系


还说明

  • 一名球员可以效力于多支球队。
  • 一个球队可以有很多球员。
  • 之间存在多对多的关系PLAYER and 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. 上述陈述是否可以回答我的第二个问题?这意味着除了您选择哪一个之外,没有任何决定因素decide使拥有方,与@JoinTable注解?


  1. 如何确定TEAM是主场?

对于双向场景中的多对多关系,可以任意选择关系的所有者,但考虑到目的,您应该选择首先检索更有意义的实体,或者根据您的目的选择更常用的实体。您只需要记住,在 ManyToOne 场景中,Many 始终需要成为拥有方。

  1. 在这种情况下,如果玩家成为拥有一方,会有什么不同吗?

不,不会,因为这种关系是双向的。

  1. 上述陈述是否可以回答我的第二个问题?这意味着除了您决定选择的因素之外,没有任何决定因素 使用 @JoinTable 注释创建拥有方?

是的,@JoinTable 必须像其他一些注释一样位于关系的所有者中。选择所有者后,您应该在该类中添加注释。

还要考虑您需要的级联操作(如果适用)以及关系双方是否都需要。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

这种多对多关系的“Owning Side”是如何确定的呢? 的相关文章

随机推荐