アノテーションを使用して Hibernate と Spring でリレーションシップを定義するにはどうすればよいですか?

Patricia Arquette
リリース: 2024-11-03 09:10:03
オリジナル
766 人が閲覧しました

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

注釈を使用して Hibernate 4 および Spring で関係を定義する

一方向および双方向の関係

1 対 1 の関係

単方向:

<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>
ログイン後にコピー

One-対多の関係

ユーザー管理の結合テーブルを使用した一方向:

<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 アノテーションをマークします。関係の所有側。

Orphan Removal

  • OrphanRemoval = true: 他の関係で参照されなくなった孤立したオブジェクトを削除します。

以上がアノテーションを使用して Hibernate と Spring でリレーションシップを定義するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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