休眠一对多关系

时间:2020-11-03 13:00:47

标签: java sql hibernate orm one-to-many

我在休眠中寻找建立关系的不同可能性,并且遇到了以下代码片段

@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注释? sample data in patient table

2 个答案:

答案 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重复,而根据您的问题应该是一名病人有多辆车