首頁  >  文章  >  Java  >  JPA 中的關係:建立沒有依賴關係的實體

JPA 中的關係:建立沒有依賴關係的實體

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-27 03:54:13607瀏覽

JPA 中的關係:建立沒有依賴關係的實體

建立後端 API 時,通常會使用實體關係來組織資料。通常,在課程或教程中,我們大多看到雙向關係。但是,如果您希望一個實體獨立於另一個實體而存在呢?在本文中,我們將探討如何使用 JPA/Hibernate 的單向關係來實現這一目標。

目錄

  • 背景與問題
  • 實體建模
  • 儲存資料的場景
    • 創建一個沒有論文時間表的學生
    • 更新學生與論文計畫關聯
  • 管理學生關係的好處
  • 替代方案:管理 ThesisSchedule 方面的關係
  • 根據您的需求選擇正確的配置

背景和問題:

假設您有兩個實體:Student 和 ThesisSchedule。 Student 和 ThesisSchedule 之間的關係是“多對一”,這意味著一個學生可以與一個論文時間表關聯,並且每個時間表可以包含多個學生。

在這種情況下,我們的目標是允許創建學生而無需先定義 ThesisSchedule。這種獨立性很有幫助,例如,在創建論文計劃之前將學生添加到資料庫時。

  • 遇到的問題:在雙向或配置不當的關係中,如果尚未建立 ThesisSchedule,即使註解為 nullable = true,建立 Student 也可能會失敗。讓我們看看如何透過單向關係解決這個問題。

實體建模

我們將使用從 Student 到 ThesisSchedule 的單向「多對一」關係來建立 Student 和 ThesisSchedule 類別。

學生實體代碼:

Relationships in JPA: Creating Entities Without Dependency

ThesisShedule 實體程式碼:

Relationships in JPA: Creating Entities Without Dependency

在這裡,我們有一個從 Student 到 ThesisSchedule 的單向關係,由 Student 類別中的 @ManyToOne 註釋指示。透過指定 nullable = true,我們允許建立 Student,而不必與 ThesisSchedule 關聯。

儲存資料的場景

讓我們看看此設定如何轉換為資料庫以及如何透過 API 儲存資料。

創建沒有 ThesisSchedule 的學生

透過此設置,我們可以在不提供 ThesisSchedule 的情況下創建學生。

建立學生的 POST 要求(不含 ThesisSchedule):

Relationships in JPA: Creating Entities Without Dependency

這會在 Student 表中建立一個新條目,其中 thesis_schedule_id 欄位的值為空。

結果:

Relationships in JPA: Creating Entities Without Dependency

更新學生以與論文時間表關聯

建立 ThesisSchedule 後,我們可以更新學生記錄以與其關聯。

建立論文時間表:

Relationships in JPA: Creating Entities Without Dependency

這個新建立的 ThesisSchedule 的 ID 可能為 1。

用論文時間表更新學生:

Relationships in JPA: Creating Entities Without Dependency

結果:

Relationships in JPA: Creating Entities Without Dependency

現在,Larose 已與新創建的 ThesisSchedule 關聯。

從學生角度管理關係的優點:

  • 創造彈性:我們可以獨立於 ThesisSchedule 創建學生,從而允許獨立的實體創建。
  • 結構簡單:單向關係簡化了交互,因為 ThesisSchedule 不需要知道與 Student 的關係。
  • 可擴展性:如果我們以後需要讓這種關係成為雙向的,我們可以更新 ThesisSchedule 類別以包含 Student 的集合。

替代方案:管理 ThesisSchedule 端的關係

在某些情況下,從 ThesisSchedule 端管理關係可能更合適。如果我們希望論文時間表管理其關聯的學生,並追蹤參與特定時間表的學生,那麼這種方法非常有用。

實體建模

在此設定中,ThesisSchedule 持有 Student 的集合來表示「一對多」關係,而 Student 不維護對 ThesisSchedule 的引用。

ThesisSchedule 實體程式碼:

Relationships in JPA: Creating Entities Without Dependency

學生實體代碼:

Relationships in JPA: Creating Entities Without Dependency

在此配置中,ThesisSchedule 透過 @OneToMany 註解包含一個 Student 清單。因此,可以在 ThesisSchedule 中新增或刪除學生,而無需在 Student 中直接連結。

在 ThesisSchedule 端管理關係的優點:

  • 資料集中:與論文課程相關的所有學生資訊都集中在 ThesisSchedule 中,以便更輕鬆地存取相關資料。
  • 增強控制:ThesisSchedule 可以管理其學生,簡化參與同一時間表的學生組的處理。

根據您的需求選擇正確的配置:

總之,是否在 Student 或 ThesisSchedule 端管理關係取決於您應用程式的特定需求:

  • 由學生管理的關係:如果您想獨立於論文時間表創建學生,並可選擇稍後將時間表連結到學生,請使用此設定。
  • 由 ThesisSchedule 管理的關係:如果論文時間表應管理其學生,使其成為實體之間關係的核心,則此選項更可取。

兩種配置都提供了靈活性,並允許基於所需的資料關係組織良好的後端 API。透過應用最佳實踐來建立實體關係,您可以有效地對資料庫進行建模,以滿足應用程式的特定需求。

單向關係是管理後端 API 中實體之間可選依賴關係的強大選項。

我希望這個解決方案可以幫助其他開發人員更好地理解和使用 JPA/Hibernate 中的單向關係。

以上是JPA 中的關係:建立沒有依賴關係的實體的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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