2013-05-01 144 views
2

我有三個相關的實體JPA實體批量刪除不工作

public class EntityA 
{ 
private Long id; 
} 


public class EntityB 
{ 
private Long id; 
private EntityA entityA; 
private EntityC entityC; 

} 

public class EntityC 
{ 
private Long id; 
} 

Query query = persistenceManager.createNamedQuery("DELETE FROM EntityB a WHERE a.entityA = :entityA AND a.entityC.id in :entityCList"); query.setParameter("entityA", entityAObj); query.setParameter("entityCList", entityCList); query.executeUpdate();

我使用的MySQL數據庫。參數:entityCListentityC idsArrayList,即,List<Long> entityCList:entityAEntityA的對象。

當我運行上面的刪除查詢時,記錄沒有從數據庫中刪除,也沒有拋出異常。查詢有什麼問題。

+2

如果您使用的是Hibernate,它的doc明確地聲明連接不能用在where子句中:http://docs.jboss.org/hibernate/core/4.2/manual/en-US/html_single/ #batch-direct – 2013-05-01 11:13:50

+0

@JB Nizet你是對的。我正在使用休眠,我想這正是問題所在。有沒有任何解決方法呢? – 2013-05-01 14:18:34

回答

1

什麼是SQL生成的?

嘗試將entityC與EntityC對象而不是id的列表進行比較。

或者,嘗試使用子選擇而不是連接。

+0

我試過比較對象,我注意到一件奇怪的事情。它刪除了一些,並不刪除一些仍然沒有錯誤。 'Query query = persistenceManager.createNamedQuery(「DELETE FROM EntityB a WHERE a.entityA =:entityA AND a.entityC in:entityCList」)'。你認爲應該是什麼問題?我最後的解決方案是在每個實體上調用一個實體刪除。 – 2013-05-06 15:33:54