gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 15:26:09 29 4
gpt4 key购买 nike

我有简单的域:

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/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com