首页 > 解决方案 > Hibernate 一对多关系

问题描述

我在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 注解呢? 患者表中的样本数据

标签: javasqlhibernateormone-to-many

解决方案


你也可以@JoinTable在病人类中使用,像这样

 @OneToMany
 @JoinTable(
        name = "vehicle",
        joinColumns = @JoinColumn(name = "vehicle_id"),
        inverseJoinColumns = @JoinColumn(name = "patient_id"))
private Collection<Vehicle> vehicles = new ArrayList<Vehicle>();

如果你没有inverseJoinColumns在@JoinTable 注解中提及,持久化提供者假设一个主键连接到主键

但是根据屏幕截图,您的患者表对我来说有点奇怪,因为它看起来患者 ID 是重复的,而根据您的问题,它应该是一个拥有多辆车的患者


推荐阅读