簡體   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