Сопоставление поля без идентификатора JPA в качестве внешнего ключа

#java #jpa

#java #jpa

Вопрос:

У меня есть два объекта следующим образом:

 @Entity  
public class Entity1  
{
  @Id  
  Long id;  
  @Basic  
  @OneToOne  
  @Column(unique=true,nullable=false)  
  String awesome;  
...    
}  



and

@Entity  
public class Entity2  
{  
  @Id  
  Long id;  
  @OneToOne(mappedBy="awesome",targetEntity=Entity1.class)    
  @Column(name="myAwesome", insertable=false,updateable=false)   
  @Basic   
  String awesome;  //FK to Entity1  
}    
  

Я ожидаю, что будет сгенерирован SQL, который выглядит следующим образом:

 Alter Table Entity1 Add Constraint Entity1Entity2_Awesome Foreign Key (myAwesome) References Entity1.Awesome
  

В настоящее время SQL не генерируется, я использую eclipselink.

Ответ №1:

Строка не может быть OneToOne, и вы не можете пометить что-либо как Basic и OneToOne.

Для создания отношения OneToOne используйте,

@OneToOne Entity2 сущность 2;

Все отношения должны быть по идентификатору, а не по полю без идентификатора, такому как awesome. Можно определить внешний ключ для поля без идентификатора в EclipseLink, но не в JPA, для этого вам нужно будет использовать DescriptorCustomizer.

В общем случае отношения должны быть по идентификатору, поэтому либо пересмотрите отношение идентификатора.

Ответ №2:

Я думаю, вам следует использовать @JoinColumn здесь и явно указать имена столбцов для объединения.