我在Person和Address类之间有一对多的关系。根据Hibernate doc,许多方面总是关系的拥有方,即多方不应该定义mappedBy元素。
在我的情况下,一个人可以有很多地址,所以Person对应一边而Address对应多边。如果我没有在两个类中定义mappedBy元素哪个类成为关系的所有者?
Owner表是否始终具有外键映射?
答案 0 :(得分:3)
是的,拥有实体的表总是带有外键的表。
令人遗憾的是,JPA规范的作者选择将该实体称为该关系的“所有者”。该名称与聚合术语相冲突,这些术语通常会同时使用。例如,在您的情况下,Person拥有地址(如果您删除了一个Person,您将删除其所有地址;如果删除地址,则不会删除拥有该地址的Person)。但是,它是在Person和Address之间拥有关系的地址。
实际上,“拥有方”仅仅意味着“具有实际定义用于记录关系的外键的表的一方”。
答案 1 :(得分:2)
如果未指定mappedBy,则表示您没有双向关系。相反,你将有两个单向关系。
在一对多关系中,外键必须位于所有者表或单独的连接表中。你不能在一对多关系的一个方面的表中。将它放在 one 方面是没有意义的,因为你不能将许多值(引用多面表的外键)映射到JPA的一行中的一列。