オブジェクト・リレーショナル・マッパーである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のアノテーションを介した複合主キーにするだろう。
しかし、そのようなクラスであっても、基本的には結合ツールのテーブルなので、リレーショナルデザインでは毒の兆候が見られます。