Le annotazioni JoinColumn devono essere utilizzate con associazioni di relazione

In OpenJPA, quando un attributo della relazione ha sia un'annotazione @OneToOne che una @ManyToOne con un'annotazione @Column, l'annotazione @Column viene gestita come un'annotazione @JoinColumn. EclipseLink genera un'eccezione che indica che la classe di entità deve utilizzare @JoinColumn invece di @Column per associare un attributo di relazione.

Questa regola contrassegna le annotazioni @Column che utilizzano le annotazioni OneToOne o ManyToOne. La correzione rapida sostituisce l'annotazione @Column con un'annotazione @JoinColumn. Tutti gli attributi di annotazione corrispondenti vengono copiati nell'annotazione @JoinColumn. Gli elementi di javax.persistence.Column, length, precision e scale, non vengono copiati.

Ad esempio, questa regola contrassegna l'annotazione Column nella classe di entità seguente:


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

La correzione rapida sostituisce l'annotazione @Column con un'annotazione @JoinColumn e fornisce le importazioni appropriate.


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

Per informazioni su questo problema e altri problemi della migrazione da OpenJPA a EclipseLink, consultare la guida OpenJPA to EclipseLink JPA Migration: Mappings.