2015-09-29 63 views
0
public Person deletePerson(Person entity) { 
    EntityManager ems = emf.createEntityManager(); 

    try { 
     ems.getTransaction().begin(); 
     ems.merge(entity); 
     ems.remove(entity); 
     ems.getTransaction().commit(); 
    } finally { 
     ems.close(); 
    } 
    return entity; 
} 

它不工作我不知道爲什麼?給我java.lang.IllegalArgumentException實體必須設法調用remove?

+4

把你自己放在我們的鞋子裏。如果沒有任何關於這些代碼的背景,爲什麼你會相信我們不僅能夠客觀地理解錯誤來自哪裏以及爲什麼它會發生? – Makoto

+0

其關於JPA我試圖刪除一行。應該很簡單,但我不知道爲什麼它不起作用。代碼是標準的。 –

+0

你的問題很可能會被關閉。別擔心,這不是世界末日。只要您添加必要的信息(通過使用您的文章下面的編輯鏈接),您可以請求重新打開它。 – 11684

回答

5

它不起作用,因爲刪除操作需要託管實體傳遞給它。你可以修改這樣的代碼,使其工作:

entity = ems.merge(entity); 
ems.remove(entity); 

因爲merge收益管理實體實例,您可以調用remove與它返回的對象,因爲它是由JPA(您傳遞給merge對象是管理不受影響,這就是您的代碼失敗的原因)。

+1

您可以使用em.getReference()來改進解決方案。使用ems.merge(entity)會在'DELETE'之前向數據庫發出不必要的'SELECT'語句。以下應該只發出'DELETE'語句:'ems.remove(ems.getReference(entity.getId))' – OndrejM

相關問題