2010-08-04 5 views
70

Есть ли способ указать с помощью JPA, что должно быть несколько уникальных ограничений для разных наборов столбцов?Несколько уникальных ограничений в JPA

@Entity 
@Table(name="person", 
     [email protected](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 и DataNucleus.

+7

+1 для попыток избежать аннотаций конкретного поставщика – corydoras

ответ

112

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

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

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

+1

В настоящее время у меня есть эта аннотация, но похоже, что Hibernate не создает индекс для таблицы, существует ли таблица (и она настроена для обновления), или если я удаляю таблицу и пусть Hibernate автоматически сгенерирует его. Я что-то упускаю? –

Смежные вопросы