建立單向一對一關係關係,在所屬類上使用@OneToOne 註解。配置@JoinColumn註解來指定依賴類別的表中保存外鍵的列的名稱。
範例:
<code class="java">public class Foo { private Long fooId; @OneToOne private Bar bar; } public class Bar { private Long barId; // No corresponding mapping to Foo.class }</code>
對於雙向一對一關係,請使用 @OneToOne 註解兩個類別。在所屬類別上使用 @JoinColumn 註解來指定外鍵列名稱。在依賴類別上,使用 @JoinColumn 註解將外鍵對應回所屬類別。
範例:
<code class="java">public class Foo { private Long fooId; @OneToOne(cascade = CascadeType.ALL) @JoinColumn(name = "barId") private Bar bar; } public class Bar { private Long barId; @OneToOne(mappedBy = "bar") private Foo foo; }</code>
對於使用用戶管理的連接表的單向一對多關係,建立一個映射兩個類別之間關係的連接表類別。使用@Entity和@Table註解連接表,並將列對應到父類別和子類別的主鍵。
範例:
<code class="java">public class Foo { private Long fooId; @OneToMany @JoinTable(name="FOO_BAR", joinColumns = @JoinColumn(name="fooId"), inverseJoinColumns = @JoinColumn(name="barId")) private List<Bar> bars; } public class Bar { private Long barId; // No mapping specified here. } @Entity @Table(name="FOO_BAR") public class FooBar { private UUID fooBarId; @ManyToOne @JoinColumn(name = "fooId") private Foo foo; @ManyToOne @JoinColumn(name = "barId") private Bar bar; // You can store other objects/fields on this table here. }</code>
對於使用外鍵映射的雙向一對多關係,請使用@OneToMany 註釋所屬類,並使用@ManyToOne 註解依賴類別。使用 @JoinColumn 註解指定將在依賴類別表中儲存外鍵的列名。
範例:
<code class="java">public class Foo { private Long fooId; @OneToMany(mappedBy = "bar") private List<Bar> bars; } public class Bar { private Long barId; @ManyToOne @JoinColumn(name = "fooId") private Foo foo; }</code>
對於使用Hibernate 管理的連接表的雙向多對多關係,請使用@OneToMany 註釋每個類別。建立一個連接表類別來映射兩個類別之間的關係。使用@Entity和@Table註解連接表,並將列對應到父類別和子類別的主鍵。
範例:
<code class="java">public class Foo { private Long fooId; @OneToMany @JoinTable(name="FOO_BAR", joinColumns = @JoinColumn(name="fooId"), inverseJoinColumns = @JoinColumn(name="barId")) private List<Bar> bars; } public class Bar { private Long barId; @OneToMany @JoinTable(name="FOO_BAR", joinColumns = @JoinColumn(name="barId"), inverseJoinColumns = @JoinColumn(name="fooId")) private List<Foo> foos; }</code>
對於使用使用者管理的連結表物件的雙向多對多關係,建立一個映射兩個類別之間關係的聯接表類別。使用@Entity和@Table註解連線表,並將列對應到父類別和子類別的主鍵。用 @OneToMany 註解每個類,並將字段對應到連接表類。
範例:
<code class="java">public class Foo { private Long fooId; @OneToMany(mappedBy = "bar") private List<FooBar> bars; } public class Bar { private Long barId; @OneToMany(mappedBy = "foo") private List<FooBar> foos; } @Entity @Table(name="FOO_BAR") public class FooBar { private UUID fooBarId; @ManyToOne @JoinColumn(name = "fooId") private Foo foo; @ManyToOne @JoinColumn(name = "barId") private Bar bar; // You can store other objects/fields on this table here. }</code>
Hibernate 可以任一方式或雙向進行級聯操作處於雙向關係。透過在所屬類別上標記 @OneToMany 註釋,級聯會以所需方向進行變更。一般來說,建議在關係的擁有者標記級聯。
孤立物件刪除可確保自動從資料庫中刪除不再與父物件關聯的孤立物件。透過在 @OneToMany 註解上設定 orphanRemoval = true 來啟用孤立刪除。
在初始化集合之前存取包含延遲取得集合的實體時,會發生 LazyInitializationException。若要解決此問題,請使用 Hibernate.initialize() 明確初始化集合,或在 @OneToMany 註解上使用 fetchType = FetchMode.EAGER 來立即載入集合。
以上是如何使用註解定義 Hibernate 4 和 Spring 中實體之間的關係?的詳細內容。更多資訊請關注PHP中文網其他相關文章!