validation - 如何捕获grails.validation.ValidationException?

标签 validation grails

我有简单的域:

package app

   class Customers {
   String CUSTOMER
   String NOTE

   static mapping = {
      version false
      id column: 'ID_CUSTOMER', type: 'long',
         generator: 'sequence',
         params: [sequence: 'CUSTOMER_SEQ']
   }

   static constraints = {
      CUSTOMER(nullable: false, blank: false, unique: ['NOTE'])
      NOTE(nullable: true, blank: true) 
   }
}

在数据库中正确创建了列和约束(我想同时约束客户和注释),但是没有得到:
grails.validation.**ValidationException**

我正进入(状态:
Message: Hibernate operation: could not execute statement; SQL [n/a]; ORA-00001: unique constraint (TEST2.UNIQUE_CUSTOMER_NOTE) violated
; nested exception is java.sql.SQLIntegrityConstraintViolationException: ORA-00001: unique constraint (TEST2.UNIQUE_CUSTOMER_NOTE) violated

违反约束条件时,是否应该获取 ValidationException

Controller 代码是由generate-all脚本生成的标准自动代码。

最佳答案

您没有显示任何 Controller 代码-您是否正在检查validate()save()调用的返回值(或使用hasErrors())并重定向回去,以便用户可以纠正错误?

如果更改一个或两个值并且它们不再唯一,但是您不会调用validate()save(),则将看到您所看到的结果。这是因为在请求结束时,由于已刷新 session ,所有已修改的实例都将在数据库中更新,并且Hibernate使用其原始值的缓存副本来检测尚未保存和刷新的已修改/脏实例。

如果您更改了一个值但不打算保存更改(例如,如果仅为渲染GSP设置了值),请确保通过调用discard()从 session 中退出该实例-Hibernate不会尝试推送这些更改,如果实例不再附加到 session 。

关于validation - 如何捕获grails.validation.ValidationException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27293321/

相关文章:

php - 验证请求时 Laravel 中的 REST API

grails - 防止对taglib输出进行编码

grails - grails g:选择i18n

grails - 将3个集合归类为一个,然后排序

javascript - 如何访问拖动的文本(或 : How Does Dragging Text into an Input "Work"? )

java - JSON 接受数据类型 int 的空白或空白

javascript - 验证单选按钮是否被选中?

html - 如何在 HTML5 工具提示中显示所有必需的值?

jquery - 无法识别Ajax

Grails 集成测试在测试应用程序中不起作用,但单独启动时运行正常