POST には多くの TAG があり、TAG には多くの POST がある典型的な例があります。典型的な を使用する代わりに、@ManyToMany
TAGPOST と呼ばれる中間のドメイン オブジェクトを使用します。これにより、投稿が特定のタグでタグ付けされたときなど、そこに有用なデータを含めることもできます。各 POST、および TAG resp、 TAGPOSTと@OneToMany
関係があります。
特定の要件として、投稿に同じタグを 2 回含めることはできないため、TAGPOST.post と TAGPOST.tag のペアは常に一意である必要があります。通常は、TAGPOST オブジェクトの格納を担当する複合主キー ペアをテーブルに作成することでこれを行います。
私の知る限り、この一意の制約を表現する方法はありません。をマークjpa.ddl=update
しました。つまり、アプリケーションを新しい環境に移動するたびに、DB でこれを手動で修正する必要があります。これは非常に不便で、特に単体テストの場合はエラーが発生しやすくなります。これは、反復ごとに多かれ少なかれデータベースが作成され、削除されるためです。
で手動でチェックを行うか、チェックを@PrePersist
ビジネスレイヤーに移動して、PostService を作成することさえ考えていました。
私は何をしますか?Play がデフォルトで持っているものを見逃していますか? @ManyToOne
TAGPOST クラスのプロパティの一意性を表現するための巧妙な注釈はありますか?
参考までに: 私は Play 1.2.5 を使用しています
編集: TAGPOST クラスは次のようになります。
@Entity
public class TagPost extends Model {
@ManyToOne
public Tag tag;
@ManyToOne
public Post post;
public Date dateAdded;
...
}