【问题标题】:many-to-many relation and relational model [closed]多对多关系和关系模型
【发布时间】:2014-02-02 12:22:12
【问题描述】:

我在 Merise 或 UML 中学习,如果我们有两个具有多对多关系的表,我们必须在关系模型中(在 Mysql 中)创建一个新表,并且该表将包含两个其他表的两个表的 ID。 但是我们真的必须创建一个新的,因为我认为使用休眠和映射我们不需要。
因为每个表(实体)都会有另一个表(实体)的列表。
那么处理多对多关系的正确方法是什么?是否创建新表?

【问题讨论】:

    标签: mysql hibernate jpa uml


    【解决方案1】:

    您仍然需要一个“联接表”,其中包含两列,其中包含其他两个表的外键。

    使用hibernate,当一个实体有一个List时,你仍然需要能够将这个关系存储在表上。

    例如,如果您想要 TableA 和 TableB 之间的多对多..

    //TableA class:    
    @ManyToMany
    @JoinTable(name="TABLEA_TABLEB",
        joinColumns=
            @JoinColumn(name="TABLEA_ID", referencedColumnName="ID"),
        inverseJoinColumns=
            @JoinColumn(name="TABLEB_ID", referencedColumnName="ID")
        )
    public Set<TableB> bees;
    
    //TableB Class: 
    @ManyToMany(mappedBy="bees")
    public Set<TableA> ays;
    

    这将创建一个包含两列 ('tablea_id', 'tableb_id') 的连接表;这些列将与您的主要实体的“ID”(主键)具有外键关系。

    【讨论】:

      【解决方案2】:

      通常您需要normalise 数据库中的多对多关系,(在某些极端情况下,专家可能会choose not to)。然而 Spring 不是其中之一,它只是简化了manual normalisation process 的一部分。

      【讨论】:

        【解决方案3】:

        你提到了 UML:

        对于Association Classjoin table 除了keys 之外还有“额外”列。

        【讨论】:

          猜你喜欢
          • 2021-02-21
          • 2019-05-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-08-25
          相关资源
          最近更新 更多