Für Beziehungszuordnungen müssen JoinColumn-Annotationen verwendet werden

Wenn in OpenJPA ein Beziehungsattribut eine @OneToOne- oder eine @ManyToOne-Annotation mit einer @Column-Annotation hat, wird die @Column-Annotation als @JoinColumn-Annotation behandelt. EclipseLink löst eine Ausnahme aus, die anzeigt, dass die Entitätsklasse @JoinColumn anstelle von @Column verwenden muss, um ein Beziehungsattribut zuzuordnen.

Diese Regel markiert @Column-Annotationen, die mit OneToOne- und ManyToOne-Annotationen verwendet werden. Die Schnellkorrektur ersetzt die @Column-Annotation durch eine @JoinColumn-Annotation. Alle entsprechenden Annotationsattribute werden in die @JoinColumn-Annotation kopiert. Die javax.persistence.Column-Elemente length, precision und scale werden nicht kopiert.

Diese Regel markiert beispielsweise die Column-Annotation in der folgenden Entitätsklasse:


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

Die Schnellkorrektur ersetzt die @Column-Annotation durch eine @JoinColumn-Annotation und stellt die entsprechenden import-Anweisungen bereit.


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

Informationen zu diesem Problem und zu weiteren Problemen bei der Migration von OpenJPA auf EclipseLink finden Sie in der Veröffentlichung OpenJPA to EclipseLink JPA Migration: Mappings.