理解JPA JoinColumn 和mappedBy 之間的區別
在JPA 中,@JoinColumn 和mappedBy 註解用於定義實體之間的關係。然而,它們在建立這些關係時扮演著不同的角色。
JoinColumn 註解
@JoinColumn 註解用於關係的擁有者。這表示用@JoinColumn註解的實體有一個指向引用實體的外鍵列。以下是範例:
@Entity public class Company { @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY) @JoinColumn(name = "companyIdRef", referencedColumnName = "companyId") private List<Branch> branches; ... }
在此範例中,Company 實體是關係的擁有者。它有一個名為「companyIdRef」的外鍵列,它引用 Branch 實體中的「companyId」列。這表示 Branch 實體與特定公司關聯。
mappedBy 註釋
mappedBy 註解用於關係的非擁有方。這意味著用mappedBy註解的實體有一個儲存引用實體的外鍵的欄位。以下是範例:
@Entity public class Company { @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "companyIdRef") private List<Branch> branches; ... }
在此範例中,Company 實體仍然是關係的擁有者。然而,Branch 實體現在是相反的一面。它有一個名為“companyIdRef”的字段,用於儲存所屬實體(公司)的外鍵。
主要區別
@JoinColumn 和mappedBy 之間的主要區別是that:
@JoinColumn 和mappedBy 都允許在之間建立雙向關係實體。這意味著您可以使用帶有註釋的欄位從一個實體導航到另一個實體。但是,需要注意的是,用mappedBy註解的實體沒有自己的級聯操作。這意味著對逆實體所做的更改不會自動級聯到擁有實體。
要在雙向關係中啟用完全級聯操作,建議將 @JoinColumn 放置在擁有實體上,並將mappedBy 放置在逆實體上邊。這確保了對任一實體的變更都會正確級聯到另一個實體。
以上是JPA 關係:「@JoinColumn」和「mappedBy」之間有什麼區別?的詳細內容。更多資訊請關注PHP中文網其他相關文章!