Hibernate と Spring アノテーションを活用して、エンティティ間の 1 対多、多対 1、および多対多の関係を確立および管理するにはどうすればよいですか?

Barbara Streisand
リリース: 2024-11-02 22:00:30
オリジナル
312 人が閲覧しました

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 でリレーションシップを作成する

1 対多のリレーションシップ

  • Uni- direction: 所有クラス Foo は Bar のリストを維持します。データベースでは、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>
    ログイン後にコピー

多対 1関係

  • 単方向: 所有クラス Bar には Foo への参照があります。データベースでは、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>
    ログイン後にコピー

設定Options

  • orphanRemoval: true の場合、孤立したエンティティ (親によって参照されていないエンティティ) はフラッシュ時に削除されます。
  • fetchType : の遅延ロードに使用されるフェッチ戦略のタイプを制御します。
  • cascade: 親エンティティから子エンティティにカスケードされる操作を指定します。

トラブルシューティング

  • LazyInitializationException: にアクセスしようとすると発生します。最初にコレクションを初期化せずに遅延ロードされたコレクション。
  • パフォーマンスの問題: Eager Fetching を過度に使用すると、パフォーマンスが低下する可能性があります。
  • orphanRemoval: 不必要な要素を避けるために慎重に使用してください。データベースの削除。

以上がHibernate と Spring アノテーションを活用して、エンティティ間の 1 対多、多対 1、および多対多の関係を確立および管理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート