Java JPA映射非id字段作为外键

Java JPA映射非id字段作为外键,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(mapped

我有两个实体,如下所示:

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

我认为您应该在此处使用并显式指定要联接的列的名称。

我认为您应该在此处使用并显式指定要联接的列的名称。

字符串不能是OneToOne,也不能将某些内容标记为Basic和OneToOne

要创建OneTONE关系,请使用

@奥内托内 实体2实体2

所有关系都应该按Id,而不是按非Id字段(如awesome)进行。可以在EclipseLink中的非Id字段上定义外键,但在JPA中不可以,为此您需要使用DescriptorUserMizer


一般情况下,关系应该是由Id决定的,因此请重新考虑Id之间的关系。

字符串不能是OneToOne,并且不能将某些内容标记为Basic和OneToOne

要创建OneTONE关系,请使用

@奥内托内 实体2实体2

所有关系都应该按Id,而不是按非Id字段(如awesome)进行。可以在EclipseLink中的非Id字段上定义外键,但在JPA中不可以,为此您需要使用DescriptorUserMizer

一般来说,关系应该是由Id决定的,所以要么重新考虑Id之间的关系