[英]Hibernate One to many relationship
我在 hibernate 中寻找关系形成的不同可能性,我遇到了下面的代码片段
@Entity
@Table(name="patient")
class Patient {
@OneToMany
@JoinColumn
private Collection<Vehicle> vehicles = new ArrayList<Vehicle>();
}
@Entity
@Table(name="vehicle")
class Vehicle {
}
这里存在从患者到车辆的 1:n 关系。 我们在 Patient 类中添加了一个车辆集合。 到目前为止完美。 所以我的疑问是,如果我们在 Patient 类中添加 @JoinColumn 注释,在车辆集合上方,我们会在“患者”表中获得一列,该列指的是(vehicle_id)“车辆”表的主键。 因此,如果患者有多个车辆,那么患者表中将有 2 个具有相同患者 ID 的元组。 那么它会违反主键约束吗? 如果您感到困惑,我将提供带有一些示例数据的表格的屏幕截图。 那么在Patient类中可以写@JoinColumn注解吗?
是的,您可以在 Patient 实体中添加 @JoinColumn,这将引用不在 Patient 类中但在 Vehicle 类中的列,例如 Vehicle 表:
| 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;
}
您也可以在患者类中使用@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 是重复的,而根据您的问题,应该是一名患者拥有多辆车
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.