这种多对多关系的“拥有方”是如何确定的?

2022-09-03 06:38:58

我试图牢牢掌握“拥有方”的概念。无法从我在这里发现的任何问题中获得清晰的图片。基本上,我正在学习Java EE JPA教程。它们具有以下数据库模式,其中和具有多对多关系PLAYERTEAM

enter image description here


还说明了

  • 一名球员可以在许多球队中。
  • 一支球队可以有很多球员。
  • 和 之间存在多对多关系。PLAYERTEAM

到目前为止,相当直接。但是,当进入编码部分时,它们会成为关系的拥有方。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.在这种情况下,如果玩家成为拥有方,会有什么不同吗?

本教程中也说明了这一点。

“指定实体是关系的所有者,因此实体是与实体关系的所有者。@JoinTableTEAMPLAYER

话虽如此:

3. 上述陈述会使我的第二个问题成为现实吗?这意味着除了您决定使用@JoinTable注释制作哪一个之外,没有其他决定因素?


答案 1
  1. 如何确定TEAM是拥有者一方?

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

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

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

  1. 上述陈述会使我的第二个问题成为现实吗?这意味着除了您决定使用@JoinTable注释来制作哪一个之外,没有其他决定因素?

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

还要考虑如果应用,以及是否需要在关系的两端具有的级联操作。


答案 2

AFAIK你可以确定拥有方。在m:n场景中选择任何特定侧都没有错。

因此,要回答您的问题:

  1. 如何确定TEAM是拥有者一方?

我武断地认为。

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

不会有任何区别

3 .上述陈述会使我的第二个问题成为现实吗?这意味着除了您决定使用@JoinTable注释来制作哪一个之外,没有其他决定因素?

是的


推荐