了解JPA JoinColumn 与mappedBy
在JPA 中,@JoinColumn 注释定义当前实体中引用列的外键列引用的实体。相比之下,mappedBy 属性指定当前实体是双向关系的反向关系,其中外键的所有权位于引用的实体中。
所有权和反向关系
使用@JoinColumn时,带有注释的实体被视为关系的“所有者”。因此,其表将包含链接到引用表的外键列。另一方面,mappedBy 属性表示带有此注释的实体是关系的“反”方。外键的所有权位于mappedBy引用的实体中。
注解示例
下面是一个说明差异的示例:
@Entity public class Company { @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY) @JoinColumn(name = "companyIdRef", referencedColumnName = "companyId") private List<Branch> branches; ... } @Entity public class Company { @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "companyIdRef") private List<Branch> branches; ... }
在第一个代码块中,使用了@JoinColumn,使Company成为关系的所有者。 Company 的表将包含引用 Branch 表中的“companyId”列的外键列“companyIdRef”。
在第二个代码块中,使用mappedBy,使 Company 成为关系的反面。 Branch 现在是所有者,其表将包含引用 Company 的“companyId”列的外键列“companyIdRef”。
双向关系
使用mappedBy 时,您可以从关系的任一侧访问相关实体,从而实现双向导航。单独使用 @JoinColumn 时这是不可能的,因为外键所有权仅属于一个实体。
以上是JPA:@JoinColumn 与mappedBy:何时使用哪个?的详细内容。更多信息请关注PHP中文网其他相关文章!