Adnotările JoinColumn trebuie să fie utilizate cu mapările de relaţie

În OpenJPA, când un atribut relaţie are fie o adnotare @OneToOne sau o @ManyToOne cu o adnotare @Column, adnotarea @Column este tratată ca o adnotare @JoinColumn. EclipseLink aruncă o excepţie care indică faptul că clasa entitate trebuie să folosească @JoinColumn în loc de @Column pentru a mapa un atribut relaţie.

Această regulă semnalează adnotările @Column care sunt utilizate cu adnotările OneToOne sau ManyToOne. Corecţia rapidă înlocuieşte adnotarea @Column cu o adnotare @JoinColumn. Toate atributele de adnotare corespunzătoare sunt copiate la adnotarea @JoinColumn. Elementele javax.persistence.Column length, precision, şi scale nu sunt copiate.

De exemplu, această regulă semnalează adnotarea Column în următoarea clasă entitate:


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

Corecţia rapidă înlocuieşte adnotarea @Column cu o adnotare @JoinColumn şi furnizează importurile corespunzătoare.


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

Pentru informaţii despre această problemă şi alte probleme legate de migrarea OpenJPA la EclipseLink, vedeţi ghidul OpenJPA to EclipseLink JPA Migration: Mappings.