我有一个简单的域对象
class MyDomain
{
String id
String name
static constraints =
{
id unique:true
name nullable:true
}
static mapping =
{
table 'schema.MyDomain'
id column:'MY_ID', type:'string', generator:'assigned'
}
}
我遇到的问题是当我在对象上调用validate时,即使id字段为null,它也会返回true。我原以为所有列都可以为空:除非另有明确说明,否则为false。如果我改变了行
id unique:true
到
id unique:true, nullable:false
然后它似乎工作正常。我的主要问题是,为什么我必须为ID列明确设置nullable?它只是一小段代码,但我不喜欢只是添加代码标记而不理解为什么它是一个更大问题的症状。
答案 0 :(得分:0)
id
列是自动生成并自动填充的(打开版本控制时[默认情况下为true]),您不必声明新的列。
默认情况下,此默认id列为nullable:false
,您仍然可以设置映射属性和ID生成策略,就像您在上面对它做的那样。
但是,如果您要为应用中的所有域定义默认约束,则可以通过在config.groovy
文件中设置以下内容来全局执行此操作。
grails.gorm.default.constraints = {
myShared(nullable:true, size:1..20)
}
有关约束的更多信息,请参阅Grails documentation。