EclipseLink复合PK与FK

时间:2017-03-21 11:01:51

标签: java jpa eclipselink jpa-criteria

我正在使用eclipselink 2.5.1。

假设我有这两个类。

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...
}

Car具有复合主键(idManufacturor和date),而idManufacturor也是引用类Manufacturor的外键。

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

错误

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

我知道如果我添加一个制造商FK列,问题将会解决,但它会重复。

如果我不够清楚,请随时询问任何精确度。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

添加JoinColumn注释

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

Name是数据库中的FK列名(不是实体)。

referencedColumnName“id”必须与manufacturer表中定义的id相对应。