了解 JPA 中 JoinColumn 和mappedBy 之间的区别
在 Java Persistence API (JPA) 中,管理实体之间的关系至关重要。建立关系的关键注解是@JoinColumn和@mappedBy。
当使用@OneToMany注解建立双向关系时,需要区分关系的拥有者和反向者。在拥有方使用@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; ... }
在第一个例如,公司是所有者,分支机构通过外键列companyIdRef引用。在第二个示例中,Company 是关系的反面,通过映射列 companyIdRef 引用分支。
正确的注释用法
对于中提供的代码问题,正确的注释应该是:
@Entity public class Company { @OneToMany(mappedBy = "company", orphanRemoval = true, fetch = FetchType.LAZY, cascade = CascadeType.ALL) private List<Branch> branches; } @Entity public class Branch { @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "companyId") private Company company; }
通过使用这些注释,Company 和 Company 之间建立了双向关系分公司,以公司为反方,分公司为拥有方。
以上是JPA 中的 JoinColumn 与mappedBy:何时使用哪个注释?的详细内容。更多信息请关注PHP中文网其他相关文章!