【问题标题】:Join many tables to one [Many-to-many and with extra columns] using Hibernate使用 Hibernate 将多个表连接到一个 [多对多和额外的列]
【发布时间】:2013-08-13 02:49:26
【问题描述】:

您能帮我吗,使用休眠和注释我想将 4 个表(prof、salle、groupe、cours)与另一个表(creneau)连接起来。其中4个与第5个表是多对多的关系。

我用谷歌搜索了它,我知道多对多关系(我发现只有 2 个表的情况)将创建一个链接表来加入它们,它包含它们的键(在我的情况下也会有额外的列)

这是我找到的最佳链接Join Tutorial。我发现更适合该问题的解决方案是为 4 个表 (prof-creneau)/(salle/creneau) 重复该教程 .... 并具有相同的链接表。

这是实现它的最佳方式(对我来说似乎是重复的)?

【问题讨论】:

  • 我不认为它很糟糕:S,你的意思是像继承这样的东西对我来说听起来最糟糕,但我不是休眠专家
  • 我对您的架构不是 100% 清楚。你是说有 4 种不同的多对多关系(prof-creneau、salle-creneau、groupe-creneau 和 cours-creneau)?或者你是说它们都可以是多对多的(prof-salle、prof-groupe、salle-groupe 等),或者所有五个都有不同的组合(prof-salle-groupe- cours-creneau)?

标签: java mysql sql hibernate jpa


【解决方案1】:

经典的@ManyToMany 关系是指两个实体之间的关系。

如果你想要多对多的表关系,额外的列你需要连接表。

这是一个有用的例子:

http://www.mkyong.com/hibernate/hibernate-many-to-many-example-join-table-extra-column-annotation/

【讨论】:

    【解决方案2】:

    正如我在对您的回答的评论中提到的,我不是 100% 清楚,但我猜您有四种不同的多对多关系:

    1. 教授-克雷诺
    2. sale-creneau
    3. groupe-creneau
    4. cours-creneau

    如果是这样,那么您的猜测是正确的。实现它的最好方法是建立四个独立的多对多关系。这意味着您将有四个连接表(每个关系一个,每个有两列;一个外键用于 creneau,一个外键用于关系中的另一个表)。

    在 Hibernate 中,您将分别指定所有这些映射。

    您的 DAO 类可能类似于:

    public class Prof {
        private Set<Creneau> creneaus = ...;
    }
    
    public class Salle {
        private Set<Creneau> creneaus = ...;
    }
    
    public class Groupe {
        private Set<Creneau> creneaus = ...;
    }
    
    public class Cours {
        private Set<Creneau> creneaus = ...;
    }
    
    public class Creneau {
        private Set<Prof> profs = ...;
        private Set<Salle> salles = ...;
        private Set<Groupe> groupes = ...;
        private Set<Cours> courss = ...;
    }
    

    这似乎是重复的,但你确实在这里有四个独立的关系。

    【讨论】:

    • 这是我的情况,我只是想知道是否有更好的方法来做到这一点。谢谢
    • 不!不幸的是,这就是你必须做的。 :) 顺便说一句,如果适合您,您可以在 Hibernate 配置中设置 hibernate.hbm2ddl.auto 属性,以根据您的映射自动为您创建数据库表(包括连接表)。这对于初始开发很有用 - 不要在生产过程中留下它。见表 3.7docs.jboss.org/hibernate/orm/3.3/reference/en-US/html/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-21
    • 1970-01-01
    • 1970-01-01
    • 2016-05-11
    • 2018-12-19
    相关资源
    最近更新 更多