Hibernate: @UniqueConstraint для нескольких таблиц?

У меня есть модель данных, в которой несколько объектов наследуют некоторые общие атрибуты от одного объекта суперкласса. Я использую InheritanceType.JOINED в суперклассе, что заставляет Hibernate создавать единую таблицу для атрибутов, определенных в суперклассе, с таблицами подкласса, содержащими только столбцы, которые добавляются подклассом (поэтому для загрузки атрибутов для экземпляра подкласса выполняется соединение между двумя столами). То все нормально работает.

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

Thing: {id, name}

... и затем у меня есть некоторые объекты подкласса, такие как:

Company: {address}  //inherits 'id' and 'name' from 'Thing'
Employee: {company} //inherits 'id' and 'name' from 'Thing'

... и я хочу настроить Hibernate для автоматического обеспечения того, чтобы у данного Company не было двух Employee с одинаковым именем. Поле company находится в таблице Employee, но поле name находится в таблице Thing, поэтому есть ли способ заставить Hibernate применять это ограничение, или мне нужно делать это программно всякий раз, когда я добавляю новый Employee?


person aroth    schedule 24.05.2011    source источник


Ответы (2)


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

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

person Stijn Geukens    schedule 24.05.2011

Вы можете не использовать InheritanceType.JOINED, тогда все окажется в огромной таблице, и вы сможете написать свое ограничение. Как было сказано ранее: то, что вы хотите, просто невозможно в реляционной БД.

person Kajetan Abt    schedule 24.05.2011