JPA将非id字段映射为外键

时间:2011-04-07 17:24:22

标签: 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。

2 个答案:

答案 0 :(得分:1)

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

要创建OneToOne关系,请使用

@OneToOne Entity2 entity2;

所有关系都应该是Id,而不是非id字段,例如awesome。可以在EclipseLink中的非Id字段上定义外键,但在JPA中不能,您需要使用DescriptorCustomizer。

一般来说,关系应该是Id,所以要么重新考虑Id的关系。

答案 1 :(得分:0)

我认为你应该在这里使用@JoinColumn并明确指定要加入的列的名称。