我有一个 @ManyToMany
类型的关系和一个 @JoinTable
关联。
问题是关系中的实体有自己的表,但有几个属性应该放在关联表中。
我认为 A_C
表很好。
添加 @SecondaryTable
副本。
@Entity
@Table(name = "A")
@SecondaryTable(name = "A_C", pkJoinColumns = {
@PrimaryKeyJoinColumn(columnDefinition = "A_ID", name = "A_ID")})
class A {
@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(name = "A_B", joinColumns = {@JoinColumn(name = "A_ID")}, inverseJoinColumns = {@JoinColumn(name = "B_ID")})
private List<B> bs = new ArrayList<B>();
@Column(table = "A_B")
private int b1;
}
@Entity
@Table(name = "B")
@SecondaryTable(name = "A_B", pkJoinColumns = {
@PrimaryKeyJoinColumn(columnDefinition = "B_ID", name = "B_ID")})
class B {
@Column(table = "A_B")
private int a1;
@Column(table = "A_B")
private int a2;
@ManyToMany(mappedBy = "A_ID", fetch = FetchType.LAZY)
private List<A> as = new ArrayList<A>();
}
这在保存
A
实体时,B
以以下方式复制:A_ID B_ID a1 a2
1 0 1 1
1 1 0 0
应该在哪里
A_ID B_ID a1 a2
1 1 1 1
@Embeddable
也不起作用。塞达诺。
最佳答案
A_B
是表 A
和 B
的连接表,但您也将其用作 B
的辅助表。
这不起作用。如果将 B.a1
分配给多个 B.a2
,那么 B
和 A
应该具有什么值?
有以下三种可能:
* a1 和 a2 属于关联。在这种情况下,您需要一个关联类来存储附加信息。
* a1和a2只属于B:a1和a2不应该在A_B
表中
* A
是 B
的组合:表 A_B
和 B
应该合并,并将多对多关系替换为一对多关系。
如果没有属性的特定名称,很难判断它们是否真正属于。
关于Hibernate manytomany @JoinTable + @SecondaryTable 重复条目,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10801181/