Anotações do JoinColumn devem ser usadas com mapeamentos de relacionamento

No OpenJPA, quando um atributo de relacionamento possui uma anotação @OneToOne ou @ManyToOne com uma anotação @Column, a anotação @Column é tratada como uma anotação @JoinColumn. O EclipseLink lança uma exceção que indica que a classe de entidade deve usar @JoinColumn em vez de @Column para mapear um atributo de relacionamento.

Esta regra sinaliza anotações @Column que são usadas com anotações OneToOne ou ManyToOne. A correção rápida substitui a anotação @Column por uma anotação @JoinColumn. Todos os atributos de anotação correspondentes são copiados para a anotação @JoinColumn. Os elementos length, precision e scale do javax.persistence.Column não são copiados.

Por exemplo, esta regra sinaliza a anotação Column na classe de entidade a seguir:


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

A correção rápida substitui a anotação @Column por uma anotação @JoinColumn e fornece as importações apropriadas.


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

Para obter informações sobre esse problema e outros problemas de migração do OpenJPA para o EclipseLink, consulte o guia Migração do OpenJPA para o EclipseLink JPA: mapeamentos.