这种多对多关系的"拥有方"如何确定?

Pau*_*tha 6 java orm entity-framework jpa

我正试图牢牢掌握欧文方面的概念.无法从我在这里找到的任何问题中得到清晰的图片.基本上我正在阅读Java EE JPA教程.它们具有以下数据库架构,其中PLAYERTEAM有许多一对多的关系

在此输入图像描述


还说明

  • 一名球员可以参加许多球队.
  • 一支球队可以有很多球员.
  • 之间存在许多一对多的关系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;
    }
}
Run Code Online (Sandbox Code Playgroud)

问题(S)

理解代码我没有问题.我无法处理的是:

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

2. PLAYER在这种情况下,如果成为拥有方,那会有什么不同吗?

也从教程中说明.

"指定该@JoinTable关系的TEAM实体是该关系的所有者,因此该实体是与该PLAYER实体的关系的所有者."

话虽如此:

3.上述陈述是否会使我的第二个问题成立?这意味着除了你决定使用@JoinTable注释的哪一方做出拥有方之外,没有决定因素?

Koi*_*oer 7

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

对于双向场景中的ManytoMany关系,可以任意选择关系的所有者,但是考虑到目的,您应该选择首先检索更有意义的实体或根据您的目的更多使用的实体.您只需要记住,许多人总是需要成为ManyToOne场景中的拥有者.

  1. 在这种情况下,如果PLAYER成为拥有者,那会有什么不同吗?

不,它不会因为关系是双向的.

  1. 上述陈述会使我的第二个问题成立吗?这意味着除了你决定使用@JoinTable注释决定拥有哪一方之外,没有决定因素?

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

还要考虑应用时需要的级联操作,以及是否需要在关系的两侧.