2009-08-19 61 views
1

我有兩個表通過一個外鍵與一對多關係連接。Java:休眠 - 從多個表中刪除查詢

在實體中,我有以下:

@org.hibernate.annotations.Cascade({ 
    org.hibernate.annotations.CascadeType.ALL, 
    org.hibernate.annotations.CascadeType.DELETE_ORPHAN }) 
@OneToMany(mappedBy="monitoredFlight", fetch = FetchType.LAZY) 
@OnDelete(action=OnDeleteAction.CASCADE) 
private List<bTable> BTable = new ArrayList<BTable>(); 

現在我試着從表A中刪除與批量刪除查詢:

Query query = em.createQuery("delete from A where originDateTime<:date"); 

,我也得到了外鍵約束的錯誤。我決定做一個加盟只是刪除,我會在MySQL,所以我把它改爲:

Query query = em.createQuery("delete from A join BTable where originDateTime<:date"); 

,我得到了一個語法錯誤。我嘗試了幾種有或沒有連接的組合,沒有任何作用;有任何想法嗎?

我使用mysql作爲數據庫和java語言。

+0

您正在使用什麼數據庫? – Gandalf 2009-08-19 16:31:10

回答

1

您可以使用本機查詢,下面應該在MySQL的工作:

delete a , b from a inner join b on a.id=b.a_id where ... 
1

您可以通過刪除級聯上的參數來設置外鍵,這樣當它引用的鍵被刪除時,所有作爲外鍵的行也會被刪除。

+0

我有這allerady,但我想做一個大規模的刪除,而不是一個一個刪除。 – DoviG 2009-08-19 16:37:17

+0

你是什麼意思?表A中刪除的每行都會隨後在表B上對共享該外鍵的任何行進行級聯刪除 - 因此,您將不會收到約束錯誤,而是也會刪除表B中的所有外鍵映射行。 – Gandalf 2009-08-19 17:46:51