関係マッピングには JoinColumn アノテーションを使用する必要がある

OpenJPA では、関係属性が @OneToOne アノテーションまたは @ManyToOne アノテーションのいずれかと、@Column アノテーションを共に持つ場合、この @Column アノテーションは @JoinColumn アノテーションとして扱われます。EclipseLink では、エンティティー・クラスは関係属性をマップするために @Column ではなく @JoinColumn を使用する必要があることを示す例外がスローされます。

この規則により、OneToOne アノテーションまたは ManyToOne アノテーションと共に使用されている @Column アノテーションにフラグを立てます。クイック・フィックスにより、@Column アノテーションが @JoinColumn アノテーションに置き換えられます。 対応するアノテーション属性はすべて、@JoinColumn アノテーションにコピーされます。 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 ガイドを参照してください。