web-dev-qa-db-ja.com

JPAの複数の一意の制約

JPAを使用して、異なる列のセットに複数の一意の制約があることを指定する方法はありますか?

@Entity
@Table(name="person", 
       uniqueConstraints=@UniqueConstraint(columnNames={"code", "uid"}))
public class Person {
    // Unique on code and uid
    public String code;
    public String uid;

    // Unique on username
    public String username;

    public String name;
    public String email;
}

ハイバネート固有のアノテーションを見てきましたが、まだハイバネートとデータニュークリアスを決定しているため、ベンダー固有のソリューションを避けようとしています。

75
Jacob

_@Table_の属性uniqueConstraintsは、実際にはこれらの配列を受け入れます。あなたの例は、単一の要素を持つ配列の略記です。それ以外の場合は次のようになります。

_@Table(name="person",  uniqueConstraints={
   @UniqueConstraint(columnNames={"code", "uid"}),
   @UniqueConstraint(columnNames={"anotherField", "uid"})
})
_

一意制約が1つのフィールドのみに基づいている場合は、その列で@Column(unique=true)を使用できます。

121
Bozho