Множественные уникальные ограничения в 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атрибут «S на uniqueConstraintsсамом деле принимает массив из них. Ваш пример - это просто сокращение для массива с одним элементом. В противном случае это выглядело бы так:

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

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

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