В сущности есть две пары assotications:ForeignKey JPA/спящий режим аннотации не работает, как exptected
import org.hibernate.annotations.ForeignKey;
...
@OneToOne(fetch = FetchType.LAZY, optional = false, targetEntity = UserSettingsEntityBean.class)
@JoinColumn(name = INTEGER_USER_ID)
@ForeignKey(name = "FK_USER_TO_SETTINGS")
private UserSettingsEntity userSettings;
@ManyToOne(targetEntity = DivisionEntityBean.class, optional = true)
@JoinColumn(name = "DIVISION_ID", nullable = true, columnDefinition = "integer")
@ForeignKey(name = "FK_USER_TO_DIVISIOG")
private DivisionEntity division;
Hibernate генерирует для этого ForeignKey аннотации следующих обновлений: Правильного обновления, как и ожидался:
alter table users add constraint FK_USER_TO_DIVISIOG foreign key (DIVISION_ID) references division
неправильное обновление БД, аннотации игнорируется (ограничение имя генерируется):
alter table users add constraint FK_olm1qeb13uc1worutbx1sc22k foreign key (USER_ID) references user_settings
Вы не можете это объяснить? Есть ли способ установить имя ограничения во втором случае?
UPDATED1:
Следующее решение не работает, либо:
@JoinColumn(name = INTEGER_USER_ID, foreignKey = @javax.persistence.ForeignKey(name = "FK_USER_TO_PERS_DATA"))
Это решение для ManyToOne, здесь проблема с OneToOne
UPDATED2: unit test to reproduce this issue
Возможный дубликат [Как назвать ограничение внешнего ключа ссылок ManyToOne с JPA 2.1?] (Http://stackoverflow.com/questions/23007356/how-to-name-the-foreign-key-constraint-of -manytoone-references-since-jpa-2-1) – Vitaly
@ Виталий, не, это не дубликат. Это OneToOne, решение, описанное в вашей ссылке, здесь не работает. – Alexandr