と の 2 つのクラスがForum
ありTopic
ます。
以前、次のようなフォーラム属性 (トピック内) が必要だと言いました。
@ManyToOne
@JoinColumn(name = "forum")
保護されたフォーラム フォーラム。
フォーラムのIDを保持するだけではありません。
postgresql でフォーラム属性が「bigint」(フォーラム ID) として保存されているのを見たので、とにかくフォーラム参照を保持するポイントは何ですか?
と の 2 つのクラスがForum
ありTopic
ます。
以前、次のようなフォーラム属性 (トピック内) が必要だと言いました。
@ManyToOne
@JoinColumn(name = "forum")
保護されたフォーラム フォーラム。
フォーラムのIDを保持するだけではありません。
postgresql でフォーラム属性が「bigint」(フォーラム ID) として保存されているのを見たので、とにかくフォーラム参照を保持するポイントは何ですか?
とにかくフォーラムリファレンスを保持することのポイントは何ですか?
forum
これにより、フィールドをより「オブジェクト指向」の方法で、クラスの真のフィールドとして扱うことができ、データベースによるオブジェクトグラフの表現を気にする必要がなくなります。これは、JPA/HibernateのようなORMを使用することの大きなメリットの1つです。
これこそまさに、オブジェクト リレーショナル マッピング (ORM) ソリューション (ここでは JPA) を使用する理由です。問題は、実際には参照をデータベースに入れることはできませんが、コードでは、プレーン ID よりも参照を使用する方がはるかに優れているということです。JPA がこれを行います。トピックを作成し、そのフォーラム属性をフォーラム オブジェクトに設定すると、JPA がデータベースへの挿入を処理します (フォーラムの id 属性を取得してから、SQL ステートメントを使用して手動で挿入する必要はありません)。 .
このことを考慮:
Forum f1 = new Forum();
Topic t1 = new Topic();
t1.forum = f1;
t1.forum.someMethod();
トピックからフォーラムにさかのぼってナビゲートし、フォーラムのメソッドを呼び出すだけです。この参照は、そこに ID を持つよりも優れています。
t1.forumId = f1.id;
//to navigate back without having f1 in your scope:
Forum f2 = entityManager.find(Forum.class, t1.forumId);
f2.someMethod();
ここでは、ID しか持っていないため、トピックに関連付けられたフォーラムを見つける必要がありました。ずっと悪いです。
簡単に言えば、Java コードで後方 (トピックからフォーラム) に簡単にナビゲートできるため、Topic クラスに参照がありますが、これは SQL で外部キーとしてのみ表すことができます。
ps: より正確に言うと、JPA はインターフェースです。使用する実装 (Hibernate、EclipseLink など) は、作業を行う ORM ソリューションです。