首頁 >Java >java教程 >如何使用註解定義 Hibernate 4 和 Spring 中實體之間的關係?

如何使用註解定義 Hibernate 4 和 Spring 中實體之間的關係?

Susan Sarandon
Susan Sarandon原創
2024-11-03 13:30:30490瀏覽

How do you define relationships between entities in Hibernate 4 and Spring using annotations?

在Hibernate 4 和Spring 中使用註解定義關係

單向一對一關係

建立單向一對一關係關係,在所屬類上使用@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>

與User 的單向一對多關係託管連接表

對於使用用戶管理的連接表的單向一對多關係,建立一個映射兩個類別之間關係的連接表類別。使用@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 的雙向多對多關係-託管連接表

對於使用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

在初始化集合之前存取包含延遲取得集合的實體時,會發生 LazyInitializationException。若要解決此問題,請使用 Hibernate.initialize() 明確初始化集合,或在 @OneToMany 註解上使用 fetchType = FetchMode.EAGER 來立即載入集合。

以上是如何使用註解定義 Hibernate 4 和 Spring 中實體之間的關係?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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