Я пытаюсь управлять генерацией имени внешнего ключа, используя аннотацию @ForeignKey
. Это обычно работает хорошо. Но в частном случае это не то, что я хочу, и я не знаю, как его настроить.Как наследовать настройки @ForeignKey при использовании стратегии наследования TABLE_PER_CLASS
Особый случай, когда я использую @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
. Когда базовый класс имеет отношение @ManyToOne
, и я хочу указать имя внешнего ключа, используя @ForeignKey
, он применяется только к базовому классу.
+------------+ +--------------+
| BaseEntity | -----> | OtherEntity |
+------------+ +--------------+
^
|
+--------+---------+
+----------+ +----------+
|SubEntity1| |SubEntity2|
+----------+ +----------+
Мои BaseEntity
@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
@Table(name = "base_entity")
public class BaseEntity {
@Id
@GeneratedValue
private Long id;
@ManyToOne
@JoinColumn(foreignKey = @ForeignKey(name = "FK_other_entity"))
private OtherEntity otherEntity;
}
Мои SubEntity1
(то же самое для SubEntity2
)
@Entity
@Table(name = "sub_entity_1")
public class SubEntity1 extends BaseEntity {
}
и просто быть полным .... OtherEntity
:
@Entity
@Table(name = "other_entity")
public class OtherEntity {
@Id
@GeneratedValue
private Long id;
}
Hibernate будет генерировать DDL скрипт, содержащий следующие внешние определения ключевых:
alter table base_entity
add constraint FK_other_entity
foreign key (otherEntity_id)
references other_entity (id);
alter table sub_entity_1
add constraint FK_jtmdc6tiytduxbpesmng9g3bk
foreign key (otherEntity_id)
references other_entity (id);
alter table sub_entity_2
add constraint FK_9xpb6q7qeq5r3pq071cbbiygx
foreign key (otherEntity_id)
references other_entity (id);
Как вы можете видеть суб объекты внешнего ключа имя является случайным.
Субъекты не имеют поля, содержащего ссылку на OtherEntity
, поэтому я не могу разместить здесь аннотацию @ForeignKey
.
Как я могу управлять именем внешнего ключа для сущностей при использовании таблицы в классе типа наследования?
Я использую
- весна-ботинок 1.4.3.RELEASE
- зимуют 5.6.2.Final
EDIT
Я также попытался использовать @AssociationOverride
, но это не работает.
Если вам нужно быстро настроить для генерации схемы вы можете захотеть взглянуть на мой предыдущий вопрос Generate DDL with spring boot using a custom delimiter