我正在尝试为 Hibernate 抛出的乐观锁类型异常实现异常处理,但我遇到了一个奇怪的问题。看来我无法捕捉到任何 Gorm 异常。
例如,我的服务中有以下代码:
try {
User user = User.get(1);
Thread.sleep(10000);
user.viewedAt(new Date());
user.save(flush:true);
} catch (OptimisticLockingException ex) {
log.error("Optimistic lock exception");
} catch (StaleObjectStateException ex) {
log.error("Optimistic lock exception");
}
当我用两个线程点击这个块时,它会爆炸并且异常传播到 Grails 的标准异常处理程序。即使报告的异常是 .catch 块也不会被调用StaleObjectStateException
。
我注意到如果我让它传播到控制器并在那里捕获它,我可以捕获异常,但似乎我无法在服务中实现异常处理,这很奇怪。
我错过了什么?