在休眠中的另一个实体中使用同一实体两次

Son*_*ony 2 java hibernate one-to-one hibernate-mapping

假设一个名为 Student 的类/实体,其中包含 id、父亲的职业和母亲的职业,实体类如下所示

学生班

@Entity
@Table(name = "student")
public class Student {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(nullable = false, unique = true, updatable = false)
    private int id;

    @OneToOne
    @JoinColumn(name = "occupationId")
    Occupation fathersOccupation;

    @OneToOne
    @JoinColumn(name = "occupationId")
    Occupation mothersOccupation;

}
Run Code Online (Sandbox Code Playgroud)

和职业类别

@Entity
@Table(name = "occupation")
public class Occupation {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "occupationId")
    int occupationId;

    @Column
    String title;

}
Run Code Online (Sandbox Code Playgroud)

当我尝试@OneToOne映射父亲的职业和母亲的职业时,它抛出异常Repeated column in mapping for entity。我尝试添加@Column(name="<columnName>"),但这是不允许的。我真的想要这两个字段,fathersOccupation并在学生表中进行映射mothersOccupationoneToOne

Aba*_*s A 5

@JoinColumn 指定实体中 FK 列的名称。

您的学生实体有 2 个针对职业的 FK,一个用于fathersOccupation,另一个用于 mothersOccupation,并且您为同一对象定义了两次映射。理想情况下,您应该有fathers_Occupation_idMothers_Occupation_id字段,并且您的实体中应该有相同的属性。

因此,您应该在学生表中为每个列添加相应的列名称。

@JoinColumn(name ="fathers_occupation_id")
Occupation fathersOccupation;

@JoinColumn(name="mothers_occupation_id")
Occupation mothersOccupation;
Run Code Online (Sandbox Code Playgroud)