在 Hibernate 4 中註解關係
在 Hibernate 4 和 Spring 中,您可以使用註解定義類別之間的各種關係。以下概述如何建立一對一、一對多、多對一和多對多關係:
單向一對一關係:
- 在所屬類別上使用@OneToOne(所屬類別的主鍵引用另一個類別)。
- 另一個類別上不需要對應的對應。
雙向一對一關係:
- 在所屬類上使用@OneToOne(mappedBy = "bar") 來指示關係由另一個類別管理。
- 在另一個類別上使用@OneToOne,並使用mappedBy 指向所屬類別。
單向一對多關係使用使用者管理的連結表:
- 在所屬類上使用 @OneToMany。
- 使用 @JoinTable 定義實體之間的聯結表。
- 否另一個類別需要映射。
使用外鍵映射的雙向一對多關係:
- 使用 @OneToMany(mappedBy = "bar") 在所屬類別上。
- 在另一個類別上使用@ManyToOne,並使用mappedBy 指向所屬類別。
雙向多對多許多使用 Hibernate 託管連接表:
- 在兩個類別上使用 @OneToMany 來建立自引用關係。
- 使用 @JoinTable 定義連線表。
使用使用者管理的聯接表物件進行雙向多對多:
- 在兩個類別上使用@OneToMany 建立自引用關係.
- 定義一個單獨的類別作為連接表物件。
確定雙向關係的「擁有」方:
- 通常,擁有另一個類別集合的類別被視為「擁有」方。
- 這決定了外鍵的儲存位置以及哪個類別管理變更。
選擇 FetchType
- 延遲抓取(預設)僅在需要時載入相關物件。
- 急切抓取(設定 fetchType = FetchType.EAGER)載入立即關聯物件。
透過使用Hibernate.initialize() 或FetchMode 避免LazyInitializationException:
- 使用Hibernate.Nate.延遲獲取的集合。
- 在條件上使用 setFetchMode("roles", FetchMode.SUBSELECT) 來急切地載入集合。
決定級聯方向:
- 使用級聯指定相關實體之間哪些操作(建立、更新、刪除)級聯。
- 如果需要,可以雙向設定級聯,但前提是在語意上有意義。
孤兒刪除:
- 在 @OneToMany 上啟用 orphanRemoval 以自動刪除孤兒實體(不再引用的實體)。
以上是如何在 Hibernate 4 中使用註解定義關係?的詳細內容。更多資訊請關注PHP中文網其他相關文章!