Несколько уникальных ограничений в JPA - PullRequest
75 голосов
/ 04 августа 2010

Есть ли способ указать с помощью 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;
}

Я видел аннотацию, специфичную для спящего режима, но я стараюсь избегать решений, специфичных для конкретного поставщика, так как мы все еще выбираем между спящим и датануклеусом.

1 Ответ

119 голосов
/ 04 августа 2010

Атрибут @Table uniqueConstraints фактически принимает их массив.Ваш пример - это просто сокращение для массива с одним элементом.В противном случае это будет выглядеть так:

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

Всякий раз, когда уникальное ограничение основано только на одном поле, вы можете использовать @Column(unique=true) для этого столбца.

...