为什么我必须使用 @JoinColumn 而不是 @Column

问题描述

我正在尝试加入两个实体,其中 typDossAmo 可以拥有 DossMedic 列表 但我收到以下错误实体类[class ma.cnss.wstest.TypDossAmo] 必须使用@JoinColumn 而不是@Column 来映射其关系属性[drugs]。

public class TypDossAmo implements Serializable {

    private static final long serialVersionUID = 1L;
    @Column(name = "ID")
    private BigInteger id;
    @Id
    @Basic(optional = false)
    @NotNull
    @Size(min = 1,max = 9)
    @Column(name = "NUM_DOSS")
    private String numDoss;
   
    @Column(name = "p_tab_medic")
    @OnetoMany(mappedBy="doss")
    private List<DossMedic> drugs;........
public class DossMedic implements Serializable {

    private static final long serialVersionUID = 1L;
    @EmbeddedId
    protected DossMedicPK dossMedicPK;
    @Column(name = "ID")
    private BigInteger id;
    @Column(name = "NOMBRE")
    private BigInteger nombre;
    
    @ManyToOne(fetch=FetchType.LAZY)
    @JoinColumn(name="NUM_DOSS")
    private TypDossAmo doss;

解决方法

注解@Column的思想是针对与其他表没有任何关系的公共列,当你使用@JoinColumn时就是对ORM说两个表有关系和加入他们的方式是用这个专栏。 在这种情况下,解决方案是在 TypDossAmo

中通过 @JoinColumn 更改注释 @Column
public class TypDossAmo {

    @JoinColumn(name = "p_tab_medic")
    @OneToMany(mappedBy="doss")
    private List<DossMedic> drugs;
}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...