2010-04-08 51 views
1

我在兩個類之間有一個ManyToMany關係:ClassA和ClassB,但是當這個關係的表(表名爲objectA_objectB)沒有主關鍵字時。ManyToMany Relation不會創建主鍵

在我的ClassA的,我有以下:

@ManyToMany(fetch=FetchType.LAZY) 
@OrderBy(value="name") 
@JoinTable(name="objectA_objectB", 
     joinColumns= 
      @JoinColumn(name="idObjectA", referencedColumnName="id"), 
     inverseJoinColumns= 
      @JoinColumn(name="idObjectB", referencedColumnName="id") 
) 
private List<ClassB> objectsB; 

,並在我的ClassB的我有相反的關係

@ManyToMany 
List<ClassA> objectsA; 

我只想讓這兩個ID的主鍵,但我需要像我一樣更改列的名稱。 PK爲什麼失蹤?我怎樣才能定義它?

我使用JPA 2.0 Hibernate實現,如果這有幫助。

謝謝。

回答

1

你是對的

我已經完成了與你的問題所示相同的方法。而且,的確,Hibernate不會像預期的那樣生成複合主鍵。

所以,如果你想要生成它的複合主鍵,你應該把@ManyToMany分成@ OneToMany- @ ManyToOne關係。見here如何...

UPDATE

當你有一個雙向的關係,你必須設置使用的mappedBy關係的反向端屬性

// ClassA 

@ManyToMany(fetch=FetchType.LAZY) 
@JoinTable(name="objectA_objectB", 
    joinColumns= 
     @JoinColumn(name="idObjectA", referencedColumnName="id"), 
    inverseJoinColumns= 
     @JoinColumn(name="idObjectB", referencedColumnName="id") 
) 
private List<ClassB> objectsB; 

.. 。

// ClassB 

// You do not specify the foreign key column here (it is mapped by the other side) 
@ManyToMany(mappedBy="objectsB") 
List<ClassA> objectsA; 

的mappedBy = 「objectsB說:」

在ClassA的objectsB屬性看其是否包含我,如果是這樣,拯救我們的objectA_objectB表

+0

@Arthur羅納德˚Fd加西亞關係它仍然發生與的mappedBy相同 – Javi 2010-04-12 07:27:42