繁体   English   中英

Hibernate 一对多关系

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM