2015-01-22 2 views
2

В сущности есть две пары 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

+0

Возможный дубликат [Как назвать ограничение внешнего ключа ссылок ManyToOne с JPA 2.1?] (Http://stackoverflow.com/questions/23007356/how-to-name-the-foreign-key-constraint-of -manytoone-references-since-jpa-2-1) – Vitaly

+0

@ Виталий, не, это не дубликат. Это OneToOne, решение, описанное в вашей ссылке, здесь не работает. – Alexandr

ответ

0
import javax.persistence.ForeignKey; 
import javax.persistence.JoinColumn; 
import javax.persistence.ManyToOne; 

@JoinColumn(updatable = false, nullable = false, foreignKey = @ForeignKey(name = "FK_customerUser_customer")) 
@ManyToOne(optional = false, cascade = CascadeType.DETACH, fetch = FetchType.LAZY) 
private Customer customer; 
+0

Какова версия вашего JPA/Hibernate? –

+0

Как вы можете найти это решение? –

+0

Вот как я использую, и все работает отлично! –

Смежные вопросы