理解JPA和Hibernate中的mappedBy
在Java Persistence API(JPA)和Hibernate中,mappedBy是一個至關重要的註解,它有助於管理實體之間的雙向關係。它有兩個主要目的:
1。指示關係的反面:
mappedBy 標識不擁有該關係的實體。它指定應使用該實體中的哪個屬性來存取相關屬性。這在兩個實體相互引用的雙向關係中特別有用。
2.消除外鍵約束:
與建立外鍵關係的傳統方法不同,mappedBy 允許您定義關係而無需物理添加外鍵列。相反,它利用另一個實體上現有外鍵的存在。
在雙向關係中使用mappedBy:
為了說明mappedBy 的用法,請考慮提供的範例:
<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中文網其他相關文章!