#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 здесь и явно указать имена столбцов для объединения.