@ManyToMany(mappedBy =“foo”)
Foo有:
@ManyToMany(mappedBy = "foos") private Set bars
和酒吧有:
@ManyToMany private Set foos
除了table被称为foo_bar或bar_foo之外,mappedBy属性的位置与双向关系有什么不同; 如果没有mappedBy属性,我会得到两个连接表,包括foo_bar和bar_foo。
文件说:
如果关联是双向的,则一方必须是所有者,一方必须是反向结束(即,在更新关联表中的关系值时将忽略它):
因此,具有mappedBy
属性的一侧是反面。 没有mappedBy
属性的一方是所有者。
所有者方是Hibernate查看哪一方存在的一方。 因此,例如,如果在Bar的foos集中添加Foo,Hibernate将在连接表中插入一个新行。 相反,如果您将一个Bar添加到Foo的一组条形图中,则不会在数据库中修改任何内容。
mappedBy
告诉Hibernate关系的哪一方“拥有”链接。 在OneToMany
或OneToOne
,使用mappyedBy
告诉Hibernate在另一个表中将有一个外键用于存储链接。
说到ManyToMany
,有一个连接表,所以两者都没有直接链接到另一个对象。 但是,hibernate仍然需要知道哪个是“拥有”的一方知道如何级联操作。