JoinColumn 注释必须与关系映射一起使用

在 OpenJPA 中,当关系属性具有带有 @Column 注释的 @OneToOne@ManyToOne 注释时,@Column 注释将被视为 @JoinColumn 注释。EclipseLink 抛出异常,表明实体类必须使用 @JoinColumn 而不是 @Column 来映射关系属性。

该规则将标记与 OneToOneManyToOne 注释一起使用的 @Column 注释。快速修订会将 @Column 注释替换为 @JoinColumm 注释。所有对应注释属性都将复制到 @JoinColum 注释。不会复制 javax.persistence.Column 元素 lengthprecisionscale

例如,该规则将标记以下实体类中的 Column 注释:


import javax.persistence.Entity;
import javax.persistence.Column;
import javax.persistence.Id;
import javax.persistence.ManyToOne;

@Entity
public class TransactionEntity {
    @Id
    private int id;
 
    private long transactionNumber;
    private double amount;
    
    @ManyToOne
    @Column(name="account")
    private Account account;
}

快速修订会将 @Column 注释替换为 @JoinColumn 注释并提供相应导入。


import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.JoinColumn;

@Entity
public class TransactionEntity {
    @Id
    private int id;
 
    private long transactionNumber;
    private double amount;
    
    @ManyToOne
    @JoinColumn(name="account")
    private Account account;
}

有关此问题和其他 OpenJPA 到 EclipseLink 迁移问题的信息,请参阅 OpenJPA to EclipseLink JPA Migration: Mappings 指南。