ManyToMany Relation不会创建主键

时间:2010-04-08 08:11:39

标签: java hibernate persistence jpa-2.0

我在两个类之间有一个ManyToMany关系:ClassA和ClassB,但是当这个关系的表(名为objectA_objectB的表)上没有主键时。

在我的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 个答案:

答案 0 :(得分:1)

你是对的

我做了与你的问题所示相同的方法。事实上,Hibernate并没有按预期生成复合主键。

因此,如果要生成其复合主键,则应将@ManyToMany拆分为@ OneToMany- @ ManyToOne关系。请参阅here如何...

<强>更新

如果您有双向关系,则必须使用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表中的关系