一对多的mappedBy

时间:2011-10-17 10:29:07

标签: java hibernate

我在Person和Address类之间有一对多的关系。根据Hibernate doc,许多方面总是关系的拥有方,即多方不应该定义mappedBy元素。

在我的情况下,一个人可以有很多地址,所以Person对应一边而Address对应多边。如果我没有在两个类中定义mappedBy元素哪个类成为关系的所有者?

Owner表是否始终具有外键映射?

2 个答案:

答案 0 :(得分:3)

是的,拥有实体的表总是带有外键的表。

令人遗憾的是,JPA规范的作者选择将该实体称为该关系的“所有者”。该名称与聚合术语相冲突,这些术语通常会同时使用。例如,在您的情况下,Person拥有地址(如果您删除了一个Person,您将删除其所有地址;如果删除地址,则不会删除拥有该地址的Person)。但是,它是在Person和Address之间拥有关系的地址。

实际上,“拥有方”仅仅意味着“具有实际定义用于记录关系的外键的表的一方”。

答案 1 :(得分:2)

如果未指定mappedBy,则表示您没有双向关系。相反,你将有两个单向关系。

在一对多关系中,外键必须位于所有者表或单独的连接表中。你不能在一对多关系的一个方面的表中。将它放在 one 方面是没有意义的,因为你不能将许多值(引用多面表的外键)映射到JPA的一行中的一列。