在休眠中的另一个实体中两次使用相同的实体
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>")
,但这是不允许的。我真的想要这两个字段,fathersOccupation
和 mothersOccupation
在学生 table.
中具有 oneToOne
映射
@JoinColumn 指定实体中 FK 列的名称。
您的学生实体对职业有 2 个 FK,一个用于 fathersOccupation,另一个用于 mothersOccupation,并且您为同一对象定义了两次映射。理想情况下,您的学生 table 中应该有 fathers_occupation_id 和 mothers_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;
假设一个名为 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>")
,但这是不允许的。我真的想要这两个字段,fathersOccupation
和 mothersOccupation
在学生 table.
oneToOne
映射
@JoinColumn 指定实体中 FK 列的名称。
您的学生实体对职业有 2 个 FK,一个用于 fathersOccupation,另一个用于 mothersOccupation,并且您为同一对象定义了两次映射。理想情况下,您的学生 table 中应该有 fathers_occupation_id 和 mothers_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;