2017-03-21 81 views
0

我正在使用eclipselink 2.5.1。与FK的EclipseLink复合PK

假设我有这两个班级。

JAVA

@Entity 
public class Car implements Serializable { 
    @EmbeddedId 
    protected CarPK carPK; 

    private String color; 
    @ManyToOne(fetch = FetchType.LAZY) 
    private Manufacturor manufacturor; 
    //constructors, getters & setters... 
} 

@Embeddable 
public class CarPK implements Serializable { 
    @NotNull 
    private int idManufacturor; 
    @Temporal(javax.persistence.TemporalType.DATE) 
    private Date date; 
    //constructors, getters & setters... 
} 

汽车具有复合主键(idManufacturor和日期),并idManufacturor也是一个外键引用类Manufacturor。

我遇到了映射问题。 EclipseLink将制造商对象理解为我的Car表中的一列。

错误

Internal Exception: com.microsoft.sqlserver.jdbc.SQLServerException: invalid column name : 'manufacturor'. 

我知道如果我增加一列manufacturor FK,但它会被重复的问题将得到解决。

如果我不够清楚,请随时索要任何精度。

谢谢你的帮助。

回答

1

添加JoinColumn注解

@JoinColumn(name = "id_manufacturor", referencedColumnName = "id") 

名称是在你的数据库(未实体)的FK列名。

referencedColumnName“id”必须对应于制造商表中定义的ID。

+0

感谢您的帮助,我尝试添加注释,但出现此错误:异常说明:字段[CAR.IDMANUFACTUROR]存在多个可写映射。只有一个可以被定义为可写,所有其他都必须被指定为只读。 – Knriano

+0

将updatable = false和insertable = false添加到JoinColumn注记中。 – tak3shi

+0

你刚刚救了我一天,谢谢:) – Knriano