Определите @UniqueConstraint в @MappedSuperclass

У меня есть требование, в котором многим из моих объектов требуется значение Long и отношение @ManyToOne с каким-либо другим объектом. Это требование можно легко выполнить с помощью MappedSuperclass следующим образом:

    @MappedSuperclass
    public class BaseEntity {

      @Column(name = "value", nullable = false)
      private Long value;
      @JoinColumn(name = "some_entity_id", nullable = false)
      @ManyToOne(fetch = FetchType.EAGER)
      private SomeEntity some;

Проблема в том, что длинное значение и комбинация сущности должны быть уникальными. Можно ли определить индекс в суперклассе? Если я определяю индекс в @Table объекта, код работает так, как ожидалось.

   @UniqueConstraint(name = "uq1", columnNames = {"value", "some_entity_id"})

Неудача заключается в том, что ограничение затем должно быть реплицировано во всех дочерних классах, а затем все изменения также должны быть реплицированы, оставляя наследование почти бесполезным (определенно не таким элегантным).

Подводя итог, реальный вопрос здесь таков: возможно ли определить составное уникальное ограничение из @MappedSuperclass? Если ответ НЕТ, то что бы вы сделали?

PS: я знаю, что все это имеет значение только тогда, когда действует генерация таблиц, это все часть нашей политики кодирования и лучших практик.


person Diego Borda    schedule 12.12.2013    source источник
comment
Что, если вы сделаете BaseEntity абстрактным, переключитесь на аннотации getter/setter и определите абстрактный метод getId?   -  person Simon Zambrovski    schedule 05.11.2014


Ответы (1)