Les annotations JoinColumn doivent être utilisées par les mappages de relations

Dans OpenJPA, lorsqu'un attribut de relation comporte une annotation @OneToOne ou @ManyToOne avec une annotation @Column, l'annotation @Column est traitée comme une annotation @JoinColumn. EclipseLink génère une exception qui indique que la classe entité doit utiliser @JoinColumn au lieu de @Column pour mapper un attribut de relation.

Cette règle marque les annotations @Column utilisées avec des annotations OneToOne ou ManyToOne. Le correctif rapide remplace l'annotation @Column par une annotation @JoinColumn. Tous les attributs d'annotation correspondants sont copiées dans l'annotation @JoinColumn. Les éléments javax.persistence.Column length, precision et scale ne sont pas copiés.

Par exemple, cette règle marque l'annotation Column avec la classe entité suivante :


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

Le correctif rapide remplace l'annotation @Column par une annotation @JoinColumn et fournit les importations appropriées.


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

Pour des informations sur ce problème et d'autres problèmes de migration d'OpenJPA vers EclipseLink, voir le guide OpenJPA to EclipseLink JPA Migration: Mappings.