我在休眠中寻找建立关系的不同可能性,并且遇到了以下代码片段
@Entity
@Table(name="patient")
class Patient {
@OneToMany
@JoinColumn
private Collection<Vehicle> vehicles = new ArrayList<Vehicle>();
}
@Entity
@Table(name="vehicle")
class Vehicle {
}
在这里,患者与车辆之间存在1:n的关系。我们在“患者”类中添加了“车辆集合”。到目前为止完美。所以我的疑问是,如果我们在Patient类中添加@JoinColumn批注,在Vehicles集合上方,我们在“ Patient”表中获得一列,该列引用(vehicle_id)“ vehicle”表的主键。因此,如果患者有多辆车,则患者表中将有2个具有相同Patient_id的元组。那么会违反主键约束吗?
如果您感到困惑,我将提供带有一些示例数据的表格的屏幕截图。
那么是否可以在Patient类中编写@JoinColumn注释?
答案 0 :(得分:0)
是的,您可以在“患者”实体中添加@JoinColumn,该引用将不引用“患者”类中的列,而是引用“车辆”类中的列,例如车辆表:
| id | patient_id |
| 1 | 1 |
| 2 | 1 |
@Entity
@Table(name="patient")
class Patient {
@OneToMany
@JoinColumn(name="patient_id")
private Collection<Vehicle> vehicles = new ArrayList<Vehicle>();
}
@Entity
@Table(name="vehicle")
class Vehicle {
@Column(name="patient_id")
private Integer patientId;
}
答案 1 :(得分:0)
您也可以在患者课程中使用@JoinTable
,
@OneToMany
@JoinTable(
name = "vehicle",
joinColumns = @JoinColumn(name = "vehicle_id"),
inverseJoinColumns = @JoinColumn(name = "patient_id"))
private Collection<Vehicle> vehicles = new ArrayList<Vehicle>();
如果您在@JoinTable批注中未提及inverseJoinColumns
,则持久性提供程序将假定主键为主键联接
但是从屏幕截图来看,您的病人表对我来说有点奇怪,因为它看起来像是病人ID重复,而根据您的问题应该是一名病人有多辆车