Поле без идентификатора карты JPA в качестве внешнего ключа - PullRequest
1 голос
/ 07 апреля 2011

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

@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.

Ответы [ 2 ]

1 голос
/ 11 апреля 2011

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

Чтобы создать отношение OneToOne, используйте

@ OneToOne Entity2 entity2;

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

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

0 голосов
/ 08 апреля 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...