让我们说一个名为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
映射。
@JoinColumn指定您实体中FK列的名称。
您的学生实体有2个关于职业的FK,一个是针对父亲的职业,另一个是针对母亲的职业,您为同一职业定义了两次映射。理想情况下,您的学生表中应具有Fathers_occupation_id和mothers_occupation_id字段,并且实体中应具有相同的属性。
因此,您应该在学生表中为每一个都放置一个对应的列名。
@JoinColumn(name ="fathers_occupation_id")
Occupation fathersOccupation;
@JoinColumn(name="mothers_occupation_id")
Occupation mothersOccupation;