2010-04-08 25 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