2012-05-29 63 views
4

我有一個@ManyToMany類型與@JoinTable關聯的關係。Hibernate manytomany @JoinTable + @SecondaryTable重複條目

問題是關係中的實體有它自己的表,但有幾個屬性應該去關聯表。我覺得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。

回答

0

A_B是表AB的加入表,但您也將它用作B的輔助表。

這不起作用。如果B分配給多個A s,那麼B.a1B.a2應具有哪些值?

有三種可能性: * a1和a2屬於該關聯。在這種情況下,您需要一個關聯類,它存儲附加信息。 * a1和a2只屬於B:a1和a2不應該在表A_B * AB的組合物:通過一對一替換表A_BB應合併和多對多的關係很多關係。

沒有特定的屬性名稱,很難說它們是否屬於它們。