建立後端 API 時,通常會使用實體關係來組織資料。通常,在課程或教程中,我們大多看到雙向關係。但是,如果您希望一個實體獨立於另一個實體而存在呢?在本文中,我們將探討如何使用 JPA/Hibernate 的單向關係來實現這一目標。
假設您有兩個實體:Student 和 ThesisSchedule。 Student 和 ThesisSchedule 之間的關係是“多對一”,這意味著一個學生可以與一個論文時間表關聯,並且每個時間表可以包含多個學生。
在這種情況下,我們的目標是允許創建學生而無需先定義 ThesisSchedule。這種獨立性很有幫助,例如,在創建論文計劃之前將學生添加到資料庫時。
我們將使用從 Student 到 ThesisSchedule 的單向「多對一」關係來建立 Student 和 ThesisSchedule 類別。
學生實體代碼:
ThesisShedule 實體程式碼:
在這裡,我們有一個從 Student 到 ThesisSchedule 的單向關係,由 Student 類別中的 @ManyToOne 註釋指示。透過指定 nullable = true,我們允許建立 Student,而不必與 ThesisSchedule 關聯。
讓我們看看此設定如何轉換為資料庫以及如何透過 API 儲存資料。
透過此設置,我們可以在不提供 ThesisSchedule 的情況下創建學生。
建立學生的 POST 要求(不含 ThesisSchedule):
這會在 Student 表中建立一個新條目,其中 thesis_schedule_id 欄位的值為空。
結果:
建立 ThesisSchedule 後,我們可以更新學生記錄以與其關聯。
建立論文時間表:
這個新建立的 ThesisSchedule 的 ID 可能為 1。
用論文時間表更新學生:
結果:
現在,Larose 已與新創建的 ThesisSchedule 關聯。
在某些情況下,從 ThesisSchedule 端管理關係可能更合適。如果我們希望論文時間表管理其關聯的學生,並追蹤參與特定時間表的學生,那麼這種方法非常有用。
在此設定中,ThesisSchedule 持有 Student 的集合來表示「一對多」關係,而 Student 不維護對 ThesisSchedule 的引用。
ThesisSchedule 實體程式碼:
學生實體代碼:
在此配置中,ThesisSchedule 透過 @OneToMany 註解包含一個 Student 清單。因此,可以在 ThesisSchedule 中新增或刪除學生,而無需在 Student 中直接連結。
總之,是否在 Student 或 ThesisSchedule 端管理關係取決於您應用程式的特定需求:
兩種配置都提供了靈活性,並允許基於所需的資料關係組織良好的後端 API。透過應用最佳實踐來建立實體關係,您可以有效地對資料庫進行建模,以滿足應用程式的特定需求。
單向關係是管理後端 API 中實體之間可選依賴關係的強大選項。
我希望這個解決方案可以幫助其他開發人員更好地理解和使用 JPA/Hibernate 中的單向關係。
以上是JPA 中的關係:建立沒有依賴關係的實體的詳細內容。更多資訊請關注PHP中文網其他相關文章!