[英]Hibernate unidirectional one to one
我有兩節課
class Point {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "point_id")
private Long id;
@Column(name = "name")
private String name;
}
class Link {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "link_id")
private Long id;
@Column(name = "name")
private String name;
@OneToOne
@JoinColumn(name = "fp_id")
private Point firstPoint;
@OneToOne
@JoinColumn(name = "sp_id")
private Point secondPoint;
}
如果刪除鏈接,則會出現約束錯誤。 我想獲得以下功能:
如何配置這種關系?
數據庫更新圖
在我看來,這似乎不是一對一的關聯,因為一個點可能有多個傳入鏈接。 在點側看起來像虛擬的一對多,在鏈接側看起來像是兩個多對一的關聯。
現在,實際映射一對多非常棘手,因為需要將其映射到子端的兩個列。 您可以通過在點上設置兩個集合來解決此問題,每個集合用於鏈接中的每一列(例如傳入和傳出鏈接),可以有效地將無向圖轉換為有向圖,但這會改變邏輯。
具有兩個多對一屬性的簡單映射將最容易實現。 然后,應用程序應該在刪除點之前,通過使用hql批處理刪除操作刪除鏈接:從其中firstPoint =:point或secondPoint =:point的鏈接中刪除。
如果您確實需要休眠來為您執行刪除操作,我建議您創建兩個帶有層疊=刪除的集合。
嘗試這個
@OneToOne(cascade = CascadeType.REMOVE)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.