24

休止状態の POJO に独自の制約を実装するにはどうすればよいですか? データベースには何も含まれていないと仮定します。

注釈で一意の属性を見た@Column()ことがありますが、機能させることができませんでしたか?
この制約を複数の列に適用したい場合はどうすればよいですか?

4

3 に答える 3

45

@Table(uniqueConstraints = ...)クラスで注釈を使用して一意の制約を宣言できます

@Entity
@Table(uniqueConstraints=
           @UniqueConstraint(columnNames = {"surname", "name"})) 
public class SomeEntity {
    ...
}
于 2010-12-28T12:49:21.300 に答える
34

基本的に、データベースのサポートなしでは一意制約を実装できません。

@UniqueConstraintおよびunique属性 of@Columnは、スキーマ生成ツールが対応する制約を生成するための指示であり、制約自体を実装しません。

新しいエンティティを挿入する前に何らかの手動チェックを行うことができますが、この場合、同時トランザクションで発生する可能性のある問題に注意する必要があります。

したがって、データベースに制約を適用することをお勧めします。

于 2010-12-28T13:45:04.897 に答える
20

JPA2 では、Unique 制約をフィールドに直接追加できます。

@Entity
@Table(name="PERSON_TABLE") 
public class Person{
  @Id
  @Column(name = "UUID")
  private String id;

  @Column(name = "SOCIALSECURITY", unique=true)
  private String socialSecurityNumber;

  @Column(name = "LOGINID", unique=true)
  private String loginId;
}

私見では、テーブルの最初よりも一意の制約を属性に直接割り当てる方がはるかに優れています。

ただし、複合一意キーを宣言する必要がある場合は、@table注釈で宣言するしかありません。

于 2011-04-15T13:30:12.407 に答える