2017-03-21 34 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