@UniqueConstraint для более чем двух столбцов

В моем проекте Spring/hibernate я использую uniqueConstraints = {@UniqueConstraint(columnNames={"ID_A", "ID_B"})} для проверки уникальной комбинации столбцов в таблице. Это отлично работает, когда у меня есть только два столбца.

Однако, когда я хочу добавить третий столбец ID_C к ограничению, он больше не работает.

  1. @UniqueConstraint допускает только два столбца?
  2. Если да, то как мне проверить уникальную комбинацию для более чем двух столбцов?

Спасибо за помощь, /D

Изменить: под "это больше не работает" я подразумеваю, что при добавлении новой записи в таблицу исключений не возникает. С двумя столбцами он выдает ConstraintViolationException.


person dlinx90    schedule 20.07.2012    source источник
comment
Определить не работает. Что происходит?   -  person JB Nizet    schedule 20.07.2012
comment
Если вы посмотрите на таблицу базы данных, увидите ли вы созданное ограничение? Создано ли в нем 3 столбца или менее трех столбцов?   -  person Steven Mastandrea    schedule 20.07.2012
comment
Не могли бы вы предоставить более подробную информацию? Как класс dto/mapping.   -  person AxxA Osiris    schedule 20.07.2012


Ответы (1)


Добавление UniqueConstraint к объекту не выполняет никакой проверки. Как сказано в связанной документации, он дает инструкции, которые используются при создании схемы базы данных:

Указывает, что уникальное ограничение должно быть включено в сгенерированный DDL для первичной или вторичной таблицы.

Теперь у вас осталось два варианта:

  1. Разрешить Hibernate генерировать схему базы данных
  2. Отбросьте старое ограничение и добавьте новое, используя SQL, как обычно.
person Mikko Maunu    schedule 20.07.2012
comment
У меня уже был спящий режим, генерирующий схему базы данных, но ваш второй вариант заставил меня задуматься. У меня был mysqldump, из которого я загружал данные, и он не содержал нового ограничения, что означало, что он отбрасывал таблицы, созданные в спящем режиме, и воссоздавал старые без ограничений. Кроме того, спасибо за разъяснения по поводу UniqueConstraint. / Д - person dlinx90; 20.07.2012