Anotace JoinColumn musí být použity s mapováními vztahů

V rozhraní OpenJPA platí, že pokud má atribut vztahu anotaci @OneToOne nebo @ManyToOne s anotací @Column, bude anotace @Column považována za anotaci @JoinColumn. EclipseLink generuje výjimku, která označuje, že třída entity musí k mapování atributu vztahu používat @JoinColumn místo @Column.

Toto pravidlo značí anotace @Column, které se používají s anotacemi OneToOne nebo ManyToOne. Rychlá oprava nahradí anotaci @Column anotací @JoinColumn. Všechny odpovídající atributy anotace se zkopírují do anotace @JoinColumn. Prvky javax.persistence.Column length, precision a scale se nezkopírují.

Toto pravidlo například značí anotaci Column v následující třídě entity:


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

Rychlá oprava nahradí anotaci @Column anotací @JoinColumn a poskytne příslušné importy.


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

Informace o tomto problému a jiných problémech migrace OpenJPA na EclipseLink viz příručka Migrace OpenJPA na EclipseLink JPA: Mapování.