了解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中文網其他相關文章!