1. ホーム
  2. java

[解決済み] JPAにおける複数の一意性制約

2023-05-21 07:38:25

質問

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のどちらかを決定しているので、ベンダー特有の解決策は避けようとしています。

どのように解決するのですか?

この @Table の属性 uniqueConstraints は実際にはこれらの配列を受け付けます。この例は、単一の要素を持つ配列の省略記法に過ぎません。そうでなければ、次のようになります。

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

一意制約が1つのフィールドのみに基づく場合、常に @Column(unique=true) をそのカラム上で使用します。