首頁 >Java >java教程 >如何利用 Hibernate 和 Spring 註解來建立和管理實體之間的一對多、多對一和多對多關係?

如何利用 Hibernate 和 Spring 註解來建立和管理實體之間的一對多、多對一和多對多關係?

Barbara Streisand
Barbara Streisand原創
2024-11-02 22:00:30369瀏覽

How can I leverage Hibernate and Spring annotations to establish and manage one-to-many, many-to-one, and many-to-many relationships between entities?

在Hibernate 和Spring 中使用註解建立關係

一對多關係

  • Uni- oritation 所屬類別Foo 維護一個Bars 清單。在資料庫中,Bars 將有一個指向 Foo 的外鍵。

    <code class="java">@Entity
    public class Foo {
      @OneToMany
      private List<Bar> bars;
    }
    
    @Entity
    public class Bar {
      @ManyToOne
      @JoinColumn(name="fooId")
      private Foo foo;
    }</code>
  • 雙向: Foo 和 Bar 都維護彼此的引用。

    <code class="java">@Entity
    public class Foo {
      @OneToMany(mappedBy="foo")
      private List<Bar> bars;
    }
    
    @Entity
    public class Bar {
      @ManyToOne
      @JoinColumn(name="fooId")
      private Foo foo;
    }</code>

多對一關係

  • 單向: 所屬類 Bar 引用了 Foooo。在資料庫中,Foo 將有一個指向 Bar 的外鍵。

    <code class="java">@Entity
    public class Bar {
      @ManyToOne
      @JoinColumn(name="fooId")
      private Foo foo;
    }
    
    @Entity
    public class Foo {
      // No corresponding mapping to Bar
    }</code>
  • 雙向: Foo 和 Bar 都維護彼此的引用。

    <code class="java">@Entity
    public class Bar {
      @ManyToOne
      @JoinColumn(name="fooId")
      private Foo foo;
    }
    
    @Entity
    public class Foo {
      @OneToMany(mappedBy="foo")
      private List<Bar> bars;
    }</code>

多對多關係

  • 使用橋接表:建立一個連接表來儲存關係。

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

設定選項

  • orphanRemoval:當為true時,孤立實體(未被任何父級引用的實體)將在刷新時被刪除。
  • fetchType :控制用於延遲載入的取得策略類型集合。
  • 級聯:指定從父實體級聯到子實體的操作。

故障排除

  • LazyInitializationException:嘗試存取延遲載入的集合時發生
  • :嘗試存取延遲載入的集合時發生
  • 效能問題 :過度使用預取會降低效能。
orphanRemoval:謹慎使用以避免不必要的資料庫刪除。

以上是如何利用 Hibernate 和 Spring 註解來建立和管理實體之間的一對多、多對一和多對多關係?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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