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. O corecție automată va înlocui adnotarea @Column cu o @JoinColumn adnotare. 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
clasă publică TransactionEntity {
    @Id
    int privat id;
 
    lung privat transactionNumber;
    dublu privat amount;
    
    @ManyToOne
    @Column(name="account")
    privat Account account;
}

O corecție automată va înlocui adnotarea @Column cu o @JoinColumn și furnizează importurile corespunzătoare.


import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.JoinColumn;

@Entity
clasă publică TransactionEntity {
    @Id
    int privat id;
 
    lung privat transactionNumber;
    dublu privat amount;
    
    @ManyToOne
    @JoinColumn(name="account")
    privat 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.