2013-09-24 40 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生成异常。 –

相关问题