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

时间:2014-02-24 10:37:33

标签: java entity-framework jpa orm

我正在努力牢牢掌握欧文方面的概念。从我在这里找到的任何问题都无法得到清晰的图片。基本上我正在阅读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;
    }
}

问题(S)

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

  

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

     

2。如果在这种情况下PLAYER成为拥有方,会不会有任何区别?

也从教程中说明。

  

“指定@JoinTable的实体是该网站的所有者   关系,因此TEAM实体是与PLAYER实体的关系的所有者。“

话虽如此:

  

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

3 个答案:

答案 0 :(得分:6)

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

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

  
      
  1. 在这种情况下,如果PLAYER成为拥有者,会不会有任何不同?
  2.   

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

  
      
  1. 上述陈述是否会使我的第二个问题成立?意味着除了你决定的那个之外没有决定因素   使用@JoinTable注释创建拥有方?
  2.   

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

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

答案 1 :(得分:2)

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

所以,回答你的问题:

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

我认为是随意的。

  

2。在这种情况下,如果PLAYER成为拥有者的一方会有什么不同吗?

没有任何区别

  

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

答案 2 :(得分:1)

根据你的问题,你使用ManyToMany关系双向。这是我的答案,

问题1

  • 根据数据库设计,确定TEAM是所有者。

问题2

  • 如果PLAYER成为拥有者,那就没有区别了 这种情况。见this documentation

问题3

  1. 这取决于您的数据库设计。
相关问题