Кілька унікальних обмежень у 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;
}

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

Відповіді:


130

Атрибут @Table'' uniqueConstraintsнасправді приймає їх масив. Ваш приклад - це просто скорочення масиву з одним елементом. В іншому випадку це буде виглядати так:

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

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


2
На даний момент у мене є ця анотація, але, схоже, Hibernate не генерує індекс для таблиці, чи вже існує таблиця (і вона встановлена ​​для оновлення), або якщо я видалю таблицю і дозволяю Hibernate автоматично її генерувати. Мені чогось не вистачає?
Kevin M
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.