我在两个类之间有一个多对多关系: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 实现,如果这有帮助的话。
谢谢。
最佳答案
你说得对
我已经采取了与您的问题所示相同的方法。事实上,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"说
See whether objectsB property in ClassA contains me and, if so, save our relationship in objectA_objectB table
关于java - 多对多关系不创建主键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2598380/