Hibernate manytomany @JoinTable + @SecondaryTable重复条目

时间:2012-05-29 14:28:26

标签: hibernate hibernate-mapping

我有@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也不会有效。

ssedano。

1 个答案:

答案 0 :(得分:0)

A_B是表格AB的加入表,但您也将其用作B的辅助表格。

这不起作用。如果将B.a1分配给多个B.a2,则BA应具有哪些值?

有三种可能性: * a1和a2属于该关联。在这种情况下,您需要一个关联类,它存储该附加信息。 * a1和a2仅属于B:a1和a2不应在表A_B中 * AB的组合:应合并表A_BB,并将多对多关系替换为一对多关系。< / p>

如果没有属性的特定名称,很难说它们实际属于。