Hibernate(映射到交叉引用表)

3

我正在尝试完成以下(非常牵强的)示例:

我有两个表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和C的实体...

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
我建议使用独立的关联/连接实体类,而不是隐式的多对多表格。因为在现实世界中,没有加入表格不具备其他附加字段(如创建时间、创建者、协议和雇佣合同等)。
我的意思是:
  • 表格A_B应该映射到独立实体,并且当两个事物链接在一起时必须有一些其他附加字段。
  • 表格C_AB也应映射到独立实体。
  • 当我们想要查找集合字段时,可以通过HQL按顺序查找和获取集合字段。
  • 多对多存在问题,关联表格不能有其他附加字段,但应该有。

谢谢您的回复...我能问一下我是否正确理解了您的答案。您建议我不要使用映射表(我目前拥有)而是应该创建一个新实体来模拟关系...那么这个实体不就像我已经使用的ManyToMany一样只是一个映射实体吗?只是让您知道,我的表确实只是一个映射...我不需要额外的字段。 - raven-king

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接