Hibernate(映射到交叉引用表)

时间:2013-03-11 14:53:55

标签: java hibernate data-modeling

我正在尝试做以下(非常人为的例子):

我有两张桌子A& B形成了多对多关系,我为其创建了一个映射表A_B。然后我有一个表C,它与映射表A_B形成一对多的关系。

tableA
------
a_id [pk]

然后

tableB
------
b_id [pk]

然后

tableA_B
-------
a_id [pk]
b_id [pk]

然后

tableC
------
c_id [pk]

然后

tableC_AB
---------
c_id [pk]
a_id [pk]
b_id [pk]

所以在Hibernate中我创建了A,B和B的实体。 ç...

ClassA {
    ....
    @JoinTable(
        name="A_B",
        joinColumns={@JoinColumn(name="a_id")},
        inverseJoinColumns={@JoinColumn(name="b_id")}
    )
    @ManyToMany(cascade = {CascadeType.ALL})
    private Set<B> bset = new HashSet<B>();
}

然后(反比关系)

ClassB {
    @ManyToMany(mappedBy="bset")
    private Set<A> subjects = new HashSet<A>();
}

这会创建第一个映射A_B但是我不确定如何在hibernate中创建映射C_AB。我甚至没有A_B的实体(只存在于数据库中)所以我该怎么做呢?

任何帮助表示感谢。

干杯,

JLove

1 个答案:

答案 0 :(得分:0)

我想建议使用独立的关联/连接/链接实体类而不是隐式的多对多表。因为在现实世界中没有联合表格,没有其他字段,如创建时间,由协议和雇佣合同等创建。

所以我的意思是:

  • tableA_B应该映射到独立实体,当两个东西链接在一起时,必须有一些额外的字段。
  • tableC_AB也应该映射到独立实体。
  • 当我们想要找到收集字段时,我们可以通过订单查找和获取收集字段。
  • 多对多是bugy,关联表不能有其他字段,但应该有
相关问题