如何在Grails中捕获约束(索引)违规?

时间:2015-09-16 19:06:45

标签: mysql exception grails

似乎找不到在Grails应用中捕获MySQL索引违规的正确方法。来自控制器的代码:

try {
    configurationInstance.save(flush: true) {

    request.withFormat {...}
}

catch (JDBCException exception) {
    flash.error = "This would be a duplicate attribute, please change the suffix."
    render view: 'edit', model: [exception: exception]

}

当我通过提交重复值来激发错误条件时,会忽略catch块,并且我会得到一个500错误页面,其中包含以下详细信息:

URI / itools / configuration / save

类com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException

消息重复条目'1009303-photo-recommendedable-exclusion-pattern.2-0'用于密钥'publisher_config_uk'

在控制台中我得到了: ERROR errors.GrailsExceptionResolver - 处理请求时发生MySQLIntegrityConstraintViolationException:[POST] / itools / configuration / save - 参数: 我试图抓住

  • JDBCException
  • 的SQLError
  • 的SQLException
  • SQLDataException
  • SQLIntegrityConstraintViolationException
  • MySQLIntegrityConstraintViolationException
  • com.mysql.jdbc.exceptions.jdbc4.MySQLDataException

一切都无济于事。 (FWIW我还对有问题的属性应用了唯一约束,并且在它应该导致验证错误时什么都不做。这是一个完全不同的问题。)

这样做的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

找到它:它是DuplicateKeyException。

(我必须抓住通用的Exception并查看它的详细信息才能找到它。)

现在我遇到了一个新问题:在尝试渲染或重定向时,我在itools.Configuration条目中获得“null id”(在发生异常后不要刷新会话)。“这对我来说毫无意义 - 由于重复键,新实体从未保存到数据库中,为什么null ID对象会成为问题?