У меня есть требование, в котором многим из моих объектов требуется значение 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: я знаю, что все это имеет значение только тогда, когда действует генерация таблиц, это все часть нашей политики кодирования и лучших практик.