私は一種のソーシャル ネットワークを作成しており、他のユーザーをフォローできるユーザーがいます。だから私は次のようなエンティティを持っています:
@Entity
public class FollowedUser{
@ManyToOne
private User user;
@ManyToOne
private User followedUser;
//more fields
...
}
FollowedUser エンティティに複数のフィールドがあるため、ManyToMany 関係を持つことはできません。今、私が持っている質問は次のとおりです。
- 複合キーまたは生成された ID (代理キー) を使用する必要がありますか? 代理キーが提案されているトピックに関する次のリンク ( 1、2、3 ) を読みましたが、具体的なケース (複合キーが 2 つの代理外部キーで構成される場合) に適用されるかどうかはわかりません。 . また、ここ( 4 )には、「複合主キーは通常、レガシーデータベースからマッピングするときに発生する」と書かれているため、推奨されていないと思います。
- 複合キーを使用する必要がある場合、 @IdClass (ここで推奨5 ) または @EmbeddedId (ここで推奨6 ) またはその他のオプションを使用する必要があるかどうかわかりません。私はそれが問題ではないと思いますが。
- 代理キーを使用する必要がある場合、複合候補キーを繰り返さないようにする方法がわかりません。ここ ( 7 ) で一意のインデックスについて読みましたが、それがその問題の正しい回避策であるかどうかはわかりません。