@ManyToMany(mappedBy = “foo”)

2022-09-01 03:54:06

Foo有:

@ManyToMany(mappedBy = "foos")
private Set<Bar> bars

和酒吧有:

@ManyToMany
private Set<Foo> foos

mappedBy 属性的位置对双向关系有什么区别,除了表是称为foo_bar还是bar_foo;如果没有mappedBy属性,我得到两个联接表,分别foo_bar和bar_foo。


答案 1

文档说:

如果关联是双向的,则一侧必须是所有者,一侧必须是反向端(即,在更新关联表中的关系值时将被忽略):

因此,具有该属性的一侧是反向侧。没有属性的一方是所有者。mappedBymappedBy

所有者端是Hibernate查看以了解存在哪个关联的一侧。因此,例如,如果您在柱线的 foos 集中添加 Foo,则 Hibernate 将在连接表中插入一个新行。相反,如果您将柱添加到 Foo 的柱线集中,则不会在数据库中修改任何内容。


答案 2

mappedBy告诉Hibernate关系的哪一方“拥有”链接。在 或 中,使用告诉 Hibernate 在另一个表中将有一个外键,该外键将用于存储链接。OneToManyOneToOnemappyedBy

当涉及到 时,有一个连接表,因此两者都没有直接链接到另一个对象。但是,休眠仍然需要知道哪个是“拥有”的一面,即知道如何级联操作。ManyToMany


推荐