【问题标题】:EclipseLink composite PK with FKEclipseLink 复合 PK 与 FK
【发布时间】:2017-03-21 11:01:51
【问题描述】:

我正在使用 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 和日期),idManufacturor 也是一个引用类 Manufacturor 的外键。

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

错误

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

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

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

感谢您的帮助。

【问题讨论】:

    标签: java jpa eclipselink jpa-criteria


    【解决方案1】:

    添加 JoinColumn 注释

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

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

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

    【讨论】:

    • 感谢您的帮助,我尝试添加注释,但出现此错误:异常描述:字段 [CAR.IDMANUFACTUROR] 存在多个可写映射。只有一个可以定义为可写,所有其他必须指定为只读。
    • 将 updatable=false 和 insertable=false 添加到 JoinColumn 注释中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-09
    • 2011-12-21
    • 1970-01-01
    相关资源
    最近更新 更多