Adnotacji JoinColumn należy używać z odwzorowaniami relacji

W implementacji OpenJPA, gdy atrybut relacji ma adnotację @OneToOne albo adnotację @ManyToOne z adnotacją @Column, adnotacja @Column jest traktowana jako adnotacja @JoinColumn. Interfejs EclipseLink zgłasza wyjątek wskazujący, że klasa jednostki musi używać adnotacji @JoinColumn zamiast @Column do odwzorowania atrybutu relacji.

Ta reguła powoduje oznaczenie adnotacji @Column, które są używane z adnotacjami OneToOne lub ManyToOne. Szybka poprawka zastępuje adnotację @Column adnotacją @JoinColumn. Wszystkie odpowiednie atrybuty adnotacji są kopiowane do adnotacji @JoinColumn. Elementy length, precision i scale klasy javax.persistence.Column nie są kopiowane.

Na przykład reguła ta powoduje oznaczenie adnotacji Column w następującej klasie jednostki:


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

Szybka poprawka zastępuje adnotację @Column adnotacją @JoinColumn i udostępnia odpowiednie 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;
}

Informacje na ten temat oraz na temat innych problemów z migracją interfejsu OpenJPA do interfejsu EclipseLink zawiera podręcznik Migracja interfejsu JPA ze środowiska OpenJPA do EclipseLink: Odwzorowania.