2013-04-18 45 views
6

,而現在我一直在想使用JPA的時候,爲什麼,我必須寫我刪除的方法是這樣的:當使用JPA EntityManager的,爲什麼你有你刪除之前合併?

@Transactional 
public void delete(Account account) 
{ 
    if (entityManager.contains(account)) 
    { 
     entityManager.remove(account); 
    } 
    else 
    { 
     entityManager.remove(entityManager.merge(account)); 
    } 
} 

也許包含不需要因爲事務開始,這個方法結束,但我仍然想知道爲什麼刪除不能只是一個非託管對象。是否因爲需要進行管理才能知道該對象的id是什麼?任何其他見解都會很棒。我只想了解JPA刪除的時間和方式。

回答

10

的除去操作可級聯的實體的關聯。

爲了能夠知道哪些相關實體刪除,實體管理器不能依賴於一個分離的實體,因爲根據定義,這種分離的實體並不反映實體的最新狀態,並且不必須遞歸加載所有級聯關聯。

所以,如果它接受分離實體remove()必須決定你:要麼合併分離的實體,並執行基於什麼分離的實體包含remove操作,或者簡單地裝載具有相同ID的實體作爲分離的實體,並基於加載的實體執行操作。

而是決定給你的,它只是需要一個附加實體。那樣,你決定你想要什麼。

+1

這是有道理的。感謝分享。 – testing123

相關問題