首頁 > Java > java教程 > JPA 關係中的「@JoinColumn」和「@mappedBy」有什麼不同?

JPA 關係中的「@JoinColumn」和「@mappedBy」有什麼不同?

DDD
發布: 2024-12-28 00:07:09
原創
724 人瀏覽過

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

揭示JPA 關係中@JoinColumn 和@mappedBy 之間的區別

在JPA 中,管理實體之間的關係對於資料完整性和檢索至關重要。 @JoinColumn 和 @mappedBy 這兩個註釋在建立這些關係中發揮著不同的作用。

@JoinColumn:指示所有權和外鍵列

@JoinColumn 註解標記實體作為關係的擁有者。這表示相應的表將包含一個列,該列具有對所引用表的外鍵引用。在提供的範例中:

@OneToMany(cascade = CascadeType.ALL , fetch = FetchType.LAZY)
@JoinColumn(name = "companyIdRef", referencedColumnName = "companyId")
private List<Branch> branches;
登入後複製

公司實體擁有與其分支實體的關係。 @JoinColumn 註解指定 Branch 表中名為「companyIdRef」的欄位將儲存 Company 表中「companyId」列的外鍵。

@mappedBy:表示反向關係和所有者相反實體

另一方面,@mappedBy 屬性將實體標記為關係的逆關係。 @mappedBy 中指定的屬性名稱應與相對實體中從其角度表示關係的屬性名稱相符。

在範例中:

@OneToMany(cascade = CascadeType.ALL , fetch = FetchType.LAZY, mappedBy = "companyIdRef")
private List<Branch> branches;
登入後複製

@mappedBy 屬性表示分公司實體與公司實體的關係相反。由於「companyIdRef」與 Branch 實體中的屬性名稱相符:

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "companyId")
private Company company;
登入後複製

註解使用的後果

  • @JoinColumn:使用 @JoinColumn註解的實體擁有關係,意味著它控制外鍵
  • @mappedBy:用@mappedBy註釋的實體是關係的逆關係,所有者在相反的實體中聲明。透過這兩個實體都可以進行雙向存取。

結論

理解 @JoinColumn 和 @mappedBy 之間的差異對於在 JPA 實體之間建立正確的關係至關重要。透過適當地利用這些註釋,開發人員可以維護資料完整性並無縫導航複雜的物件圖。

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

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板