2012-08-10 22 views
18

私は2つのデータベースエンティティ:ForumTopicを持っています。JPA:外部キー注釈

Topicは、のフォーラムを示すprotected long forumIdデータメンバーを持っています。

私の質問は、このデータメンバーに使用するアノテーションです。フォーラムは多くのトピックがあり、トピックは唯一のフォーラムに属したよう

+0

'forumId'を' Topic'に宣言する必要はありません。 –

+0

なぜそう言うのですか?トピックが所属するフォーラムを知る必要があるので、私はそれが必要だと思います。 – socksocket

+1

@socksocket私は '@ JoinColumn'アノテーションでIDを指定する属性' Forum'にアノテーションを付けることができると思います。 ;) – elias

答えて

25

は、おそらく@ManyToOneで注釈を付けフォーラムのtype属性に行きたい:

@ManyToOne 
@JoinColumn(name = "forumId") 
private Forum forum; 

をもっと見る:

ManyToOneおよびJPA mapping

+5

しかし、この場合の「問題」は、TopicをXMLやJSON(クライアントに渡すなど)にシリアル化すると、Forumオブジェクト全体がデフォルトでシリアル化されます... ifサーバーにトピックをアップロードし、トピック+フォーラムオブジェクト全体を渡す必要がある場合は、フォーラムIDだけを使用することはできません。場合によっては、関連するエンティティの外部キーを手動で挿入するほうが簡単です。 – splinter123

1

@ManyToOne 注釈には、フォーラムごとに多数のトピックが含まれています。

5

他の人が回答したように -
ManyToOneアノテーションとJoinColumnアノテーションを使用する必要があります。
JPAはORM - オブジェクトリレーショナルマッピングに関するものですので、
Javaでは "自然に"行ったように別のオブジェクトを参照する必要があります。あなたのケース)
これは、JPAとHibernate(以前はJPA)の関係の設計上の考慮の1つでした。