2010-11-19 18 views
2

私はJPAを使い慣れていないので、非常に基本的な問題です。JPA ManyToManyの制約

私はユーザーが製品(0〜10の範囲)に投票できるアプリケーションを持っていますが、1回のみ投票できます。私はJPAで何千人もの人間関係がこれを可能にする方法を混乱させる。

私はUserオブジェクトとVoteオブジェクトとProductオブジェクトを持っています。

ユーザーは製品に投票できますが、1回のみ投票できます。製品は多くのユーザーから多数の票を得ることができますが、ユーザーあたり1つだけです。 JPAアノテーションからこれをどのように設計するのですか?私はJPAからではなく、データベース設計からこれをはっきりと理解しています。

答えて

1

オブジェクト・リレーショナル・マッパーであるJPAを使用しているので、JPAとデータベースが関係していない場合と同じように設計してください。

私が意味することは、あなたがキャプチャしようとしているオブジェクトや関係に意味をなさない方法でオブジェクトモデル(Javaクラス)を構築することです。そして、それらのオブジェクトの周りにJPAを正しく設定することを心配してください。

最後にJPAを使用したのは約2.0でしたので、java.util.mapの実装であるフィールドの使用がどの程度完全にサポートされているのか覚えていませんが、マップはそれがサポートされていれば良い方法です。

特に、ProductオブジェクトにはMap型のフィールドがあります。あなたはJPAを無視して、Javaクラスのみ、およびデータベースの考え方の観点から、それについて考えるとき、最も合理的に感じるものは何でも

Map<User,Vote> votesOnThisProduct; 

しかし、正直なところは、移動するための方法です。

その他のオプションは、このような

public class ProductVoteRecord 
{ 
    User user; 
    Vote vote; 
    Product product; 
} 

として追加クラスを定義して、ユーザーと製品(そしておそらく投票)JPAのアノテーションを介した複合主キーにするだろう。

しかし、そのようなクラスであっても、基本的には結合ツールのテーブルなので、リレーショナルデザインでは毒の兆候が見られます。