首頁 >Java >java教程 >JPA 關係:「@JoinColumn」和「mappedBy」之間有什麼區別?

JPA 關係:「@JoinColumn」和「mappedBy」之間有什麼區別?

DDD
DDD原創
2024-12-14 19:32:11690瀏覽

JPA Relationships: What's the Difference Between `@JoinColumn` and `mappedBy`?

理解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:

  • mappedBy:
  • 指定逆向實體中保存擁有實體外鍵的欄位。
雙向關係

@JoinColumn 和mappedBy 都允許在之間建立雙向關係實體。這意味著您可以使用帶有註釋的欄位從一個實體導航到另一個實體。但是,需要注意的是,用mappedBy註解的實體沒有自己的級聯操作。這意味著對逆實體所做的更改不會自動級聯到擁有實體。

要在雙向關係中啟用完全級聯操作,建議將 @JoinColumn 放置在擁有實體上,並將mappedBy 放置在逆實體上邊。這確保了對任一實體的變更都會正確級聯到另一個實體。

以上是JPA 關係:「@JoinColumn」和「mappedBy」之間有什麼區別?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn