grails - Grails 不知道如何获取异常
问题描述
我尝试将重复的书保存到我的 Book 域类以进行测试。我有一个try-catch(Exception ex)来获取错误。
BookService bookService
try {
def book = new Book()
book.id = 'Lord of the Flies'
bookSerivce.save(book)
def anotherBook = new Book()
anotherBook.id = 'Lord of the Flies'
bookService.save(anotherBook)
} catch (Exception ex) {
System.out.println(ex.getMessage())
}
我使用ex.getMessage()。我收到此错误消息。这个基本没用。
could not execute statement; SQL [n/a]; constraint [PRIMARY]; nested exception is org.hibernate.exception.ConstraintViolationException: could not execute statement
另一方面,我从命令提示符控制台收到此错误消息。这个我可以用。它清楚地表明我的数据库中已经有一本名为“蝇王”的书。
2020-11-02 14:46:39.790 ERROR --- [eduler_Worker-1] o.h.engine.jdbc.spi.SqlExceptionHelper : (conn=665) Duplicate entry 'Lord of the Flies' for key 'PRIMARY'
我知道我不应该使用包罗万象的异常。我将需要使用更具体的异常类。我已经尝试过 catch (SQLException ex) 但它没有捕捉到错误。我还尝试了其他一些异常类,但它们也没有发现错误。
它看起来也像 book.save() 和 bookServe.save(book) 抛出一个不同的异常。
你能告诉我我可以在 catch() 函数中使用哪个异常类来捕获正确的错误吗?
谢谢!
解决方案
下面的问题和评论对我来说并不是特别清楚,但要调查的是异常的根本原因:
BookService bookService
try {
def book = new Book()
book.id = 'Lord of the Flies'
bookSerivce.save(book)
def anotherBook = new Book()
anotherBook.id = 'Lord of the Flies'
bookService.save(anotherBook)
} catch (Exception ex) {
System.out.println(ex.getMessage())
Throwable t = ex.getCause()
if(t) {
// interrogate t as the root cause
}
}
推荐阅读
- qt - 如何在 Android 的共享库中启动事件循环?
- javascript - 根据另一个下拉列表的选定值生成下拉选项
- javascript - magnificPopup 不适用于 webpack
- firebase - ML Kit for Firebase 可以用于手写文本吗?
- generics - 嵌套的泛型接口类型
- amazon-web-services - 在 AWS 上托管的 kubernetes 集群中的 KOPS 部署的主节点上连接被拒绝
- c++ - 用于 Fortran 代码预处理的 CPP -D 选项
- android - 如何使用 Cordova 在 Android 上实现打印?
- python - 如何在不使用 raw_input 或 Ctrl-C 的情况下中断无限循环?蟒蛇 2.7
- ruby-on-rails - 使用 factorygirls 模型 embeds_many 和 embedded_in 关系