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