1.2.6. 双方向リンクを機能させる


最初に、Hibernate は通常の Java のセマンティクスに影響を与えないことを念頭に置いてください。単方向の例ではどのように PersonEvent 間のリンクを作成したでしょうか。Event のインスタンスを Person のインスタンスであるイベントの参照のコレクションに追加しました。 このリンクを双方向にする場合は、逆側で同様の処理を行うため、 Person の参照を Event のコレクションに追加します。 このように 「両側でリンクを設定」 するプロセスは双方向リンクでは絶対に必要となります。
両側を正しく設定するため、 開発者の多くは保守的にプログラムを作成し、リンク管理メソッドを作成します (Person 内など)。
    protected Set getEvents() {
        return events;
    }

    protected void setEvents(Set events) {
        this.events = events;
    }

    public void addToEvent(Event event) {
        this.getEvents().add(event);
        event.getParticipants().add(this);
    }

    public void removeFromEvent(Event event) {
        this.getEvents().remove(event);
        event.getParticipants().remove(this);
    }
これでコレクションの get および set メソッドが保護されました。 これにより、 同じパッケージやサブクラスのクラスがメソッドへアクセスできるようにし、 それ以外のクラスが直接コレクションを変更できないようにします。 コレクションに対するこの手順を逆側でも行います。
inverse マッピング属性はどうするのでしょうか。 双方向リンクは Java にとって両側で参照を正しく設定することでしかありません。 しかし、 Hibernate は SQ Lの INSERT ステートメントと UPDATE ステートメントを正しく手配するための十分な情報を持っていません (制約違反を防ぐため)。 片側を関連付けるため、 逆側の「ミラー」として考慮するよう inverse は Hibernate に伝えます。 方向性ナビゲーションモデルを SQL データベーススキーマに変換する際に Hibernate が問題を解決するにはこれのみが必要となります。 ルールは明確です。 すべての双方向関連は片側を inverse とする必要があります。一対多関連では多の側を inverse とし、 多対多関連ではどちらかを inverse とする必要があります。
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2026 Red Hat
トップに戻る