1

我在两个类之间有一个多对多关系: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 实现。

谢谢。

4

1 回答 1

1

你说的对

我已经采取了与您的问题相同的方法。而且,事实上,Hibernate 并没有像预期的那样生成它的复合主键。

所以如果你想生成它的复合主键,你应该把你的@ManyToMany 拆分成@OneToMany-@ManyToOne 关系。看这里如何...

更新

当您有双向关系时,您必须使用 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 表中

于 2010-04-08T08:57:57.040 回答