首頁  >  文章  >  Java  >  如何使用註解定義 Hibernate 和 Spring 中的關係?

如何使用註解定義 Hibernate 和 Spring 中的關係?

Patricia Arquette
Patricia Arquette原創
2024-11-03 09:10:03732瀏覽

How Can You Define Relationships in Hibernate and Spring Using Annotations?

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

單向和雙向關係

一對一關係

>

單向:

<code class="java">class Foo {
    private Bar bar;
}

class Bar {
}</code>

雙向(Foo 類管理):

<code class="java">class Foo {
    @OneToOne(cascade = CascadeType.ALL)
    private Bar bar;
}

class Bar {
    @OneToOne(mappedBy = "bar")
    private Foo foo;
}</code>

一-多對多關係

使用使用者管理連接表的單向:

<code class="java">class Foo {
    @OneToMany
    @JoinTable(name = "FOO_BAR",
        joinColumns = {@JoinColumn(name = "fooId")},
        inverseJoinColumns = {@JoinColumn(name = "barId")})
    private List<Bar> bars;
}

class Bar {
    // No corresponding mapping to Foo.class
}

@Entity
@Table(name = "FOO_BAR")
class FooBar {
    private UUID fooBarId;
    private Foo foo;
    private Bar bar;
}</code>

使用外鍵對映的雙向:

<code class="java">class Foo {
    @OneToMany(mappedBy = "bar")
    private List<Bar> bars;
}

class Bar {
    @ManyToOne
    @JoinColumn(name = "fooId")
    private Foo foo;
}</code>

多對多重關係

使用Hibernate 託管連接表的雙向:

<code class="java">class Foo {
    @OneToMany
    @JoinTable(name = "FOO_BAR",
        joinColumns = {@JoinColumn(name = "fooId")},
        inverseJoinColumns = {@JoinColumn(name = "barId")})
    private List<Bar> bars;
}

class Bar {
    @OneToMany
    @JoinTable(name = "FOO_BAR",
        joinColumns = {@JoinColumn(name = "barId")},
        inverseJoinColumns = {@JoinColumn(name = "fooId")})
    private List<Foo> foos;
}</code>

使用雙向使用者管理的聯接表:

<code class="java">class Foo {
    @OneToMany(mappedBy = "bar")
    private List<FooBar> bars;
}

class Bar {
    @OneToMany(mappedBy = "foo")
    private List<FooBar> foos;
}

@Entity
@Table(name = "FOO_BAR")
class FooBar {
    private UUID fooBarId;
    private Foo foo;
    private Bar bar;
}</code>

使用雙向使用者管理的聯接表:

  • 使用雙向使用者管理的聯接>
  • 確定關係所有權

通常,具有集合的物件擁有該關係。
  • 選擇FetchType
  • 預設:LAZY
對經常使用的集合使用 EAGER。

對於需要延遲載入的集合,請考慮使用Hibernate.initialize() 或FetchMode.SUBSELECT
  • 決定級聯方向
級聯操作除非指定,否則僅朝一個方向進行。

在級聯中標記 @OneToMany 註解關係的擁有方。
  • 孤兒移除
OrphanRemoval = true:移除任何其他關係中不再引用的孤兒物件。

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

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