使用Hibernate将许多表连接到一个[多对多和多列]

时间:2013-08-13 02:49:26

标签: java mysql sql hibernate jpa

你能帮助我吗,使用hibernate和annotations我想加入4个表(prof,salle,groupe,cours)和另一个表(creneau)。其中4个与第5个表有多对多的关系。

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

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

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

2 个答案:

答案 0 :(得分:0)

Classic @ManyToMany关系指的是两个实体。

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

这是一个有用的例子:

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

答案 1 :(得分:-1)

正如我在你对你的答案的评论中提到的那样,我不是百分百清楚,但我猜你有四种截然不同的多对多关系:

  1. 教授-克勒诺
  2. 沙利-克勒诺
  3. GROUPE-克勒诺
  4. 赛道-克勒诺
  5. 如果是这种情况,那么你的猜测是正确的。实现它的最佳方式是拥有四个独立的多对多关系。这意味着您将有四个连接表(每个关系一个,每个有两列; 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 = ...;
    }
    

    这可能看似重复,但你在这里有四个独立的关系。