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

Using same entity twice in another entity in hibernate

假设一个名为 class/entity 的学生包含一个 id、父亲的职业和母亲的职业以及实体 classes 是这样的

学生class

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

}

和职业class

@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>"),但这是不允许的。我真的想要这两个字段,fathersOccupationmothersOccupation 在学生 table.

中具有 oneToOne 映射

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

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

所以你应该在你的学生 table.

中为每个人输入相应的列名
@JoinColumn(name ="fathers_occupation_id")
Occupation fathersOccupation;

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

如果有人对此感兴趣,对我有用的解决方案是使用@ManyToOne 注释重命名实体中的映射字段并在 "account_id":

之前添加前缀
@ManyToOne
@JoinColumn(name = "from_account_id") // add from_
private Account fromAcc;
@ManyToOne
@JoinColumn(name = "to_account_id") // add to_
private Account toAcc;