JPAの複数の固有の制約


84

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;
}

Hibernate固有のアノテーションを見たことがありますが、Hibernateとdatanucleusのどちらを使用するかをまだ決定しているため、ベンダー固有のソリューションを避けようとしています。

回答:


130

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

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

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


2
私は現在この注釈を持っていますが、テーブルがすでに存在する(そして更新するように設定されている)か、テーブルを削除してHibernateに自動的に生成させるかどうかにかかわらず、Hibernateはテーブルのインデックスを生成していないようです。私は何かが足りないのですか?
ケビンM
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.