9

Hibernate のベスト プラクティスでは、多対多の関連付けはまれであり、避けるべきであると述べられています。

エキゾチックな関連付けマッピングを使用しないでください。

実際の多対多の関連付けの実用的なテスト ケースはまれです。ほとんどの場合、「リンク テーブル」に格納されている追加情報が必要です。この場合、中間リンク クラスに対して 2 つの 1 対多の関連付けを使用することをお勧めします。実際、ほとんどの関連付けは 1 対多および多対 1 です。このため、他の関連付けスタイルを使用する場合は慎重に進める必要があります。

基本的で一般的なケースは次のとおりです。ユーザーは複数のチームに所属でき、チームには複数のメンバーが所属できます。

結合テーブルのエンティティを作成する以外に、@ManyToMany を使用する代わりの方法はありますか? チーム/メンバーの場合、結合テーブルには追加のデータがないため、Team>TeamMembership>User を持つことはあまり実用的ではありません。

4

2 に答える 2

6

@ManyToMany の問題の 1 つは、モデルが変更されることです。関連付けにフィールドを追加する必要がある場合は、いくつかの選択肢があります。関連付けがエンティティになるようにモデルをリファクタリングできます (リンク クラスを読み取ります)。または、@MapKeyJoinColumn のように、関連付けをさらにエキゾチックにすることもできます。どちらの場合でも、最初からモデルを正しく設計することで、将来のリファクタリングの労力を節約できます。

さらに、これらの風変わりな多対多マッピングのいずれかを使用すると、モデルが、テスト カバレッジが低く、実際の使用量が少ないエッジ ケースに近づく傾向があります。これにより、サポートされていない、またはサポートされていない機能や、未解決または発見されていないバグに遭遇するリスクが高まります。

最後に、休止状態がそれを行う方法を提供するからといって、それを使用する必要があるという意味ではありません。私の経験では、開発者が休止状態で特定の機能を意図しない方法で使用して、他の設計への影響や、価値以上の問題や頭痛の種を引き起こした制限をあまりにも多く見てきました。

于 2014-01-24T05:30:26.327 に答える