我有一个使用tomcat和Oracle 10g配置的groovy系统。 我有一个groovy类,它定义了以下内容:(简化版)
class ChangeTicket {
static constraints = {
chngNr(nullable:false)
}
String chngNr
}
我的控制器定义了一个保存方法:
if (changeTicketInstance.validate() && !changeTicketInstance.hasErrors() && changeTicketInstance.save()) {
flash.message = "changeTicket.created"
...
}
据我所知, save 方法默认调用validate方法 知道约束是否已满,因此验证方法调用 是多余的。无论如何,当执行保存时,如果字段chngNr为NULL,则将抛出异常。 实际上该字段不能为空(NULL),因为我已经定义了约束(nullable:false)。
我在这里做错了什么?
提前致谢,
路易斯
答案 0 :(得分:3)
如果 chngNr NULL ,则验证调用将失败。某些数据库不考虑空字符串(“”)null(HSQL)。如果您使用表单中的params将 chngNr 绑定到 changeTicketInstance ,则会为其分配一个空字符串作为值,在这种情况下,您希望约束为:
chngNr(blank:false)
另外,save()不会抛出异常,除非你使用save(flush:true)。 Hibernate将更改排队,除非您刷新,否则不会抛出实际异常。
答案 1 :(得分:2)
试试这个:
chngName(空白:假,可为空:假)
: - )