我有一个简单的域:
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吗?
控制器代码是由generate-all脚本生成的标准自动代码。
发布于 2014-12-04 12:35:35
您没有显示任何控制器代码--您是在检查validate()和save()调用的返回值(或者使用hasErrors())并重定向回定向以便用户修复错误吗?
如果您更改了一个或两个值,并且它们不再是唯一的,但您不会调用validate()或save(),您所看到的就会发生。这是因为在请求结束时,任何修改的实例都将在数据库中更新,因为会话会被刷新,Hibernate使用原始值的缓存副本来检测尚未保存和刷新的修改/脏实例。
如果您更改一个值,但不打算保存更改(例如,如果您只为呈现GSP设置值),请确保通过调用discard()将实例从会话中删除--如果实例不再附加到会话上,Hibernate将不会尝试推送这些更改。
https://stackoverflow.com/questions/27293321
复制相似问题