如何使用Grails 2.0获得可为空的约束?

时间:2011-12-25 12:37:16

标签: mysql hibernate grails gorm grails-2.0

我正在使用带有mysql的grails 2.0,我希望一些Domain属性可以为空。 在我的域类中,我做了:

static constraints = {
    counter(nullable: true)
    competitors(nullable: true)
}

启动我的grails应用程序后,它会创建相应的sql,但在我的mysql表中,属性不可为空,它们是“非空”。

CREATE TABLE `lookup_query` (
 `id` bigint(20) NOT NULL AUTO_INCREMENT,
 `version` bigint(20) NOT NULL,
 `competitors` bigint(20) NOT NULL,
 `counter` bigint(20) NOT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

为什么我的mysql属性“NOT NULL”而不是“NULL”?我希望它们是“NULL”。我的错误在哪里?

1 个答案:

答案 0 :(得分:1)

区别在于盒装与未装箱的类型。盒装类型是一个类,因此可以是空引用,而未装箱的类型是“基元”,不能保持空值。 GORM识别出这一点,并且知道您根本不能为基本类型设置空值,因此它不允许DB中的列为空(即使您的constraints块可能允许它),因为它知道它在代码中是不可能的。

如果您希望某个字段可以为空,那么您的代码必须允许该字段,以便以这种方式创建数据库。

另一个选项是将所有列的GORM默认值从nullable: false更改为nullable: true