1
我使用準系統JPA與Hibernate作爲提供者 - 我沒有使用任何Hibernate特有的功能。我有一個具有@ManyToMany
字段的實體,該字段映射到另一個雙列MtM表Groups
,並且爲該MtM表的字段指定了CASCADE DELETE
。有沒有辦法控制JPA級聯刪除命令?
刪除級聯所有工作正常。問題是當我需要從數據庫中刪除我的實體之一:
String jpql = "DELETE FROM Entity e WHERE e.id = :id AND :g MEMBER OF e.groups"
Query tq = em.createQuery(jpql);
tq.setParameter("id", 42);
tq.setParameter("g", myGroup);
long rows = tq.executeUpdate();
if (rows == 0) throw new Exception();
上述查詢的第二個條件將永遠是假的,現在看來,因爲實體的MTM entity_group
項實體的刪除之前被刪除發生。如果我打開查詢日誌記錄,我會看到類似這樣的:
delete from **entity_group** where (entity_id) in (select id from entity where id=?)
delete from entity where id=? and (? in (select groups1_.group_id from **entity_group** groups1_ where entity.id=groups1_.entity_id))
有什麼辦法來控制什麼時候刪除排序?我真的想在主刪除之後執行這些級聯刪除,以便條件不是無用的。我也不想將這種邏輯從數據庫層拿出來。
謝謝!