@ManyToMany(mappedBy =“foo”)

时间:2013-01-01 15:20:37

标签: java jpa orm many-to-many

Foo有:

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

和Bar有:

@ManyToMany
private Set<Foo> foos

除了table被称为foo_bar或bar_foo之外,mappedBy属性的位置对双向关系有何不同?如果没有mappedBy属性,我会得到两个连接表,包括foo_bar和bar_foo。

2 个答案:

答案 0 :(得分:41)

The documentation说:

  

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

因此,具有mappedBy属性的一方是反面。没有mappedBy属性的一方是所有者。

所有者方是Hibernate查看哪一方存在的一方。因此,例如,如果在Bar的foos集中添加Foo,Hibernate将在连接表中插入一个新行。相反,如果你将一个Bar添加到Foo的一组条形图中,则数据库中不会修改任何内容。

答案 1 :(得分:1)

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

说到ManyToMany,有一个连接表,所以两者都没有直接链接到另一个对象。但是,hibernate仍然需要知道哪个是“拥有”的一面,知道如何级联操作。