2013-09-24 39 views
0

我們重新使用了Grails,當然在它的O/R中使用了Hibernate。在一個實例中,我們有多個請求試圖刪除同一個對象。第一個線程將被刪除,而第二個嘗試刪除該對象的線程將拋出StaleStateException。這是預期的。據商務部:刪除原因StaleStateException

http://docs.jboss.org/hibernate/envers/3.6/javadocs/org/hibernate/StaleStateException.html

此異常:現在Also occurs if we try delete or update a row that does not exist.

,在我們的情況下也不例外。我們不在乎它已被刪除。我們不希望在刪除之前進行檢查,我們只是想進行異常處理,因爲它不是一個例外。

如果嘗試刪除並且對象不在那裏,我們真正想要做的就是不會有此異常拋出。

有沒有辦法用Grails/Gorm做到這一點?

我擁有的最佳理想是使用HSQL的SQL進行刪除,而不是使用hibernate/grails API。

還有更好的嗎?

回答

0

試圖抓住在線程異常:

try { 
    YourDomain.withTransaction { status -> 

     ... 

     yourDomainInstance.delete() 

     ... 

     } 
} catch (org.springframework.dao.OptimisticLockingFailureException olfe) { 
log.warn(olfe.toString()) 
} catch (org.hibernate.StaleStateException staleStateException) { 
log.warn(staleStateException.toString()) 
} 
+0

我曾想過這一點,但真的喜歡,如果異常被拋出從來沒有。 –

+0

那麼完全刪除異常,你可以遠離休眠源代碼並重新編譯它。堆棧跟蹤完全告訴你在什麼文件和行中hibernate生成異常。 –

相關問題