これは私のモデルです:
_class User {...}
class Book {
User author;
int number;
}
_
すべての書籍番号は著者ごとに1から始まり、上向きに増加します。したがって、John GrishamのBooks 1,2,3、George MartinのBook 1..5などがあります。
Book
に設定できる一意の制約はありますか。これにより、同じ著者が同じ番号の本を2つ持っていないことを保証できますか? @Column(unique = true)
と似ていますが、制約は_Author X number
_?の複合にのみ適用されます。
使用する - @UniqueConstraint
:
@Table(
uniqueConstraints=
@UniqueConstraint(columnNames={"author_id", "number"})
)
@Entity
class Book extends Model {
@ManyToOne
@JoinColumn(name = "author_id")
User author;
int number;
}
以前にテーブルを作成する場合、削除する必要があります。一意のキーは既存のテーブルに追加されません。
@axtavtが回答したように、@UniqueConstraint
アプローチ。しかし、既存のテーブルの場合、複数の可能性があります。常にではありませんが、一般的にSQLExceptionを受け取る場合があります。その理由は、複合一意キーと競合している既存のデータがテーブルにある可能性があるためです。したがって、これを回避するためにできることは、既存のデータがすべてComposite Unique Keyで問題ないかどうかを最初に手動で確認することです(単純なSQLクエリを使用して)。そうでない場合は、もちろん、違反の原因となっているデータを削除します。 (別の方法は、既存のテーブル全体を削除することですが、重要なデータが含まれていない場合にのみ使用できます)。