我嘗試編寫一個JPQL查詢,它刪除了另一個實體集合中的所有實體。 (示例代碼,沒有的getter/setter和註釋)JPQL DELETE查詢:刪除另一個實體列表中的實體
class Aa implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String value;
}
@Entity
class A implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@JoinColumn(nullable = false)
@OneToOne
private Aa aa;
@OneToMany(fetch = FetchType.EAGER, cascade = {CascadeType.ALL})
private List<B> data;
}
@Entity
class B implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String value;
}
我曾嘗試以下:
DELETE FROM B b WHERE b.id IN(SELECT k.id FROM A a JOIN a.data k WHERE a.id = :id)
但它的外鍵衝突異常結束。 另一種方法是
DELETE FROM B b WHERE EXISTS(SELECT a FROM A a WHERE a.id = :id)
,但其在外國鍵衝突也結束。
但是如果我執行一個SQL查詢直接對數據庫進行,像
DELETE FROM B WHERE id = <a id number here>
,那麼不發生錯誤...
EntityManager.remove()是不是一種選擇,因爲我要刪除大量的數據。
我很感謝你的回答和幫助。
你是對的。我在主帖中添加了註釋。母方正在控制關係。但是我有大量的A對象存儲大量的B對象。這就是我使用DELETE語句的原因。 – user2429841
檢查編輯,增加了一些建議。 – Candyman
問題是,如果我打電話給家長。getData(),然後選擇列表中的所有實體(它不管是取類型laze還是渴望)。我試圖阻止這一點。 – user2429841