我遇到了以下ORM问题:
我有两个A和B类,他们都有一组C类:
class A {
@Id
@GeneratedValue
private long id;
@OneToMany
private Set<C> cSet;
}
class B {
@Id
@GeneratedValue
private long id;
@OneToMany
private Set<C> cSet;
}
class C {
@Id
@GeneratedValue
private long id;
}
我有一个想法是使用MappedSuperclass for C并且有两个扩展类,每个都在A或B中引用。但从面向对象的角度来看,这不是最好的方法,尽管我可以使用超类类型为了与他们合作。
有没有更好的方法来实现这个模型?
谢谢, 本杰明
答案 0 :(得分:7)
如果您没有指定任何映射注释(即JoinColumn或JoinTable),它将为每个关联使用连接表。
您将拥有以下表格:
A : id
B : id
C : id
A_C : a_id, c_id (where c_id is unique)
B_C : a_id, c_id (where c_id is unique)
使用JoinColumn批注注释每个集合的替代方法:
class A {
@OneToMany
@JoinColumn(name = "a_id")
private Set<C> cSet;
}
class B {
@OneToMany
@JoinColumn(name = "b_id")
private Set<C> cSet;
}
您将拥有以下表格:
A : id
B : id
C : id, a_id, b_id
这当然在the documentation中描述。