0

我们正在使用 Grails,它当然使用 hibernate 进行 O/R。在一个实例中,我们有多个请求试图删除同一个对象。第一个线程将删除,而尝试删除该对象的第二个线程将引发 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。

还有更好的吗?

4

1 回答 1

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())
}
于 2013-09-24T13:48:20.457 回答