簡體   English   中英

Hibernate OneToMany ManyToOne 刪除級聯

[英]Hibernate OneToMany ManyToOne on delete cascade

我正在嘗試使用 Hibernate 到 map 以下關系:

每個訂單包含 2 張圖片。 當我刪除訂單時,我希望圖像也消失。

我有兩個實體,OrderItems 和 Image,它們看起來像這樣

public class OrderItems {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name="ID")
    private Long id;

    @Transient
    private String language;

    @OneToMany(fetch = FetchType.EAGER ,orphanRemoval = true, cascade = CascadeType.ALL, mappedBy = "order")
    private List<Image> images ;
}

public class Image implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name="ID")
    private Long id;

    @Column(name = "IMAGE_NAME")
    private String name;

    @Column(name = "IMAGE_BYTES", unique = false, nullable = true, length = 1000000)
    private byte[] image;

    @ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    @JoinColumn(name = "order_id" , nullable = false)
    private OrderItems order;
}

插入新訂單也會插入相應的圖像,但是當我嘗試刪除訂單時,我從表圖像中得到外鍵約束錯誤

我是否遺漏了有關 Hibernate 的信息? 屬性 cascade = CascadeType.ALL 不應該這樣做嗎?

感謝您花時間提供任何反饋。 干杯

我已經嘗試過 OneToMany 和 ManyToOne 單向和雙向,但我遇到了相同的外鍵違規錯誤,或者當我保存新訂單時我的圖像根本沒有保存。

我通過使用 Spring 刪除訂單解決了這個問題,它也自動刪除了與該訂單對應的圖像。

因此,我通過直接在數據庫上執行 sql 查詢來刪除訂單的第一種方法就是問題所在。

像這樣嘗試

@OneToMany(mappedBy = "order", cascade = CascadeType.ALL, orphanRemoval = true)

@ManyToOne(optional = false, fetch = FetchType.EAGER)
@JoinColumn(name = "order_id", nullable = false)

暫無
暫無

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

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