我在两个类之间有一个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实现,如果这有帮助。
感谢。
答案 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表中的关系