我们使用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。
还有更好的吗?
答案 0 :(得分: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())
}