Множественные уникальные ограничения в JPA

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

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


person Jay    schedule 04.08.2010    source источник


Ответы (1)


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

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

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

person Bozho    schedule 04.08.2010
comment
В настоящее время у меня есть эта аннотация, но похоже, что Hibernate не генерирует индекс для таблицы, независимо от того, существует ли таблица (и она настроена на обновление), или если я удалю таблицу и позволю Hibernate автоматически сгенерировать ее. Я что-то упускаю? - person Kevin M; 26.09.2014