Для реляционных преобразований должны использоваться аннотации JoinColumn

В OpenJPA при наличии аннотации @OneToOne или @ManyToOne у реляционного атрибута с аннотацией @Column эта аннотация @Column рассматривается как аннотация @JoinColumn. EclipseLink в этом случае генерирует исключительную ситуацию из-за того, что класс сущности должен использовать @JoinColumn вместо @Column для преобразования реляционного атрибута.

Это правило отмечает аннотации @Column, которые используются вместе с аннотацией OneToOne или ManyToOne. Процедура быстрого исправления заменяет аннотацию @Column на аннотацию @JoinColumn. Все атрибуты аннотации копируются в аннотацию @JoinColumn. Такие элементы javax.persistence.Column, как length, precision и scale, не копируются.

Ниже приведен пример аннотации Column в классе сущности, которую отметит это правило:


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

Процедура быстрого исправления заменяет аннотацию @Column на аннотацию @JoinColumn и добавляет соответствующие операторы импорта.


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

Для получения дополнительной информации об этой проблеме и других проблемах, возникающих при миграции OpenJPA в EclipseLink, обратитесь к руководству Миграция OpenJPA в EclipseLink JPA: преобразования.