温馨提示:本文翻译自stackoverflow.com,查看原文请点击:java - Using same entity twice in another entity in hibernate
hibernate hibernate-mapping java one-to-one

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

发布于 2020-03-27 10:50:26

让我们说一个名为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;

}

和职业班

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

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

    @Column
    String title;

}

当我尝试@OneToOne为父亲的职业和母亲的职业映射时,都会抛出异常Repeated column in mapping for entity我尝试添加@Column(name="<columnName>"),但不允许这样做。我真的想要这两个字段,fathersOccupation在学生表中mothersOccupation具有oneToOne映射。

查看更多

查看更多

提问者
Sony
被浏览
28
Abass A 2017-06-16 04:08

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

您的学生实体有2个关于职业的FK,一个是针对父亲的职业,另一个是针对母亲的职业,您为同一职业定义了两次映射。理想情况下,您的学生表中应具有Fathers_occupation_idmothers_occupation_id字段,并且实体中应具有相同的属性。

因此,您应该在学生表中为每一个都放置一个对应的列名。

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

@JoinColumn(name="mothers_occupation_id")
Occupation mothersOccupation;