2013-03-11 108 views
2

我尝试做以下(很做作的例子):休眠(映射到交叉引用表)

我有两个表& 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 &ç...

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

回答

0

我想表明,独立协会/加盟/链路实体类应该可以用来代替隐含许多一对多表。因为在现实世界中没有没有附加领域的连接表,如创建时间,创建者,协议和雇用合同等等。

所以我的意思是:

  • tableA_B应该被映射到独立的实体,有必须有一些附加字段时,两件事情联系在一起。
  • tableC_AB也应映射到独立实体。
  • 当我们想要查找集合字段时,我们可以通过HQL按顺序查找并获取集合字段。
  • 许多一对多是bugy和关联表不能有额外的字段,但它应该有
+0

感谢您的答复......我可以问,如果我理解你正确回答。你建议不要使用映射表(我现在有),我应该创建一个新的实体来建立关系模型......这个实体不会只是一个映射实体(就像我已经使用ManyToMany一样?知道,我的桌子确实只是一个地图...我不需要额外的领域。 – JLove 2013-03-11 16:05:17