首頁  >  文章  >  Java  >  JPA 和 Hibernate 中「mappedBy」在管理雙向關係方面的作用是什麼?

JPA 和 Hibernate 中「mappedBy」在管理雙向關係方面的作用是什麼?

Patricia Arquette
Patricia Arquette原創
2024-11-02 04:45:02528瀏覽

What is the role of `mappedBy` in JPA and Hibernate for managing bi-directional relationships?

理解JPA和Hibernate中的mappedBy

在Java Persistence API(JPA)和Hibernate中,mappedBy是一個至關重要的註解,它有助於管理實體之間的雙向關係。它有兩個主要目的:

1。指示關係的反面:

mappedBy 標識不擁有該關係的實體。它指定應使用該實體中的哪個屬性來存取相關屬性。這在兩個實體相互引用的雙向關係中特別有用。

2.消除外鍵約束:

與建立外鍵關係的傳統方法不同,mappedBy 允許您定義關係而無需物理添加外鍵列。相反,它利用另一個實體上現有外鍵的存在。

在雙向關係中使用mappedBy:

為了說明mappedBy 的用法,請考慮提供的範例:

Airline.

<code class="java">@Entity
@Table(name="Airline")
public class Airline {
    // ... Other fields ...
    @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
    @JoinColumn(name = "IDAIRLINE")
    private Set<AirlineFlight> airlineFlights;
}</code>

AirlineFlight.java:

<code class="java">@Entity
@Table(name="AirlineFlight")
public class AirlineFlight {
    // ... Other fields ...
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "IDAIRLINE")
    private Airline airline;
}</code>
在此例如,Airline 是擁有實體,因為它擁有AirlineFlights 集合。 Airline 到 AirlineFlight 的關係是透過 coachingFlights 屬性實現的。

在 AirlineFlight 方面,airlineFlight 屬性使用 @ManyToOne 進行註釋,並且mappedBy = "airlineFlights"。這指定 AirlineFlight 是關係的非擁有方,且航空公司屬性由 Airline 中的 AirlinesFlights 屬性對應。

在提供的資料庫架構中,AirlineFlights 將 IDAIRLINE 欄位作為 Airline 的外鍵。因此,Airline 確實是airlineFlights 實體的所有者。

透過使用mappedBy,您可以建立雙向關係,而無需在AirlineFlight 中新增額外的外鍵列。相反,JPA 和 Hibernate 將根據指定的屬性來對應自動連結實體。

以上是JPA 和 Hibernate 中「mappedBy」在管理雙向關係方面的作用是什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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