Java Hibernate(映射到交叉引用表)
我试图做以下(非常做作的例子): 我有两个表A和B,它们形成了多对多关系,我为它们创建了一个映射表A_B。然后我有一个表C,它与映射表A_B形成了一对多关系Java Hibernate(映射到交叉引用表),java,hibernate,data-modeling,Java,Hibernate,Data Modeling,我试图做以下(非常做作的例子): 我有两个表A和B,它们形成了多对多关系,我为它们创建了一个映射表A_B。然后我有一个表C,它与映射表A_B形成了一对多关系 tableA ------ a_id [pk] 然后 然后 然后 然后 所以在Hibernate中,我为A、B和C创建了实体 ClassA { .... @JoinTable( name="A_B", joinColumns={@JoinColumn(name="a_id")},
tableA
------
a_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>();
}
ClassA{
....
@可接合(
name=“A_B”,
joinColumns={@JoinColumn(name=“a_id”)},
inverseJoinColumns={@JoinColumn(name=“b_id”)}
)
@ManyToMany(cascade={CascadeType.ALL})
私有集bset=newhashset();
}
然后(逆关系)
ClassB{
@许多(mappedBy=“bset”)
私有集主题=新HashSet();
}
这将创建第一个映射A_B,但是我不确定如何在hibernate中创建映射C_AB。我甚至没有A_B的实体(只存在于数据库中),那么我该怎么做呢
谢谢你的帮助
干杯
JLove我建议使用独立的关联/连接/链接实体类,而不是隐式的多对多表。因为在现实世界中,没有包含诸如创建时间、创建人、协议和雇佣合同等附加字段的联接表 所以我的意思是:
- 表A_B应映射到独立实体,并且当两个对象链接在一起时,必须有一些附加字段
- 表C_AB也应映射到独立实体
- 当我们想要查找Collection字段时,我们可以通过HQL按顺序查找和获取Collection字段
- 多对多是错误的,关联表不能有额外的字段,但它应该有
tableA_B
-------
a_id [pk]
b_id [pk]
tableC
------
c_id [pk]
tableC_AB
---------
c_id [pk]
a_id [pk]
b_id [pk]
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>();
}