簡體   English   中英

一對一休眠

[英]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;
}

如果刪除鏈接,則會出現約束錯誤。 我想獲得以下功能:

  1. 刪除點->鏈接自動刪除
  2. 刪除鏈接->點沒有自動刪除

如何配置這種關系?

數據庫更新

DB圖

在我看來,這似乎不是一對一的關聯,因為一個點可能有多個傳入鏈接。 在點側看起來像虛擬的一對多,在鏈接側看起來像是兩個多對一的關聯。

現在,實際映射一對多非常棘手,因為需要將其映射到子端的兩個列。 您可以通過在點上設置兩個集合來解決此問題,每個集合用於鏈接中的每一列(例如傳入和傳出鏈接),可以有效地將無向圖轉換為有向圖,但這會改變邏輯。

具有兩個多對一屬性的簡單映射將最容易實現。 然后,應用程序應該在刪除點之前,通過使用hql批處理刪除操作刪除鏈接:從其中firstPoint =:point或secondPoint =:point的鏈接中刪除。

如果您確實需要休眠來為您執行刪除操作,我建議您創建兩個帶有層疊=刪除的集合。

嘗試這個

@OneToOne(cascade = CascadeType.REMOVE)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM