我正在使用带有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”。我的错误在哪里?
答案 0 :(得分:1)
区别在于盒装与未装箱的类型。盒装类型是一个类,因此可以是空引用,而未装箱的类型是“基元”,不能保持空值。 GORM识别出这一点,并且知道您根本不能为基本类型设置空值,因此它不允许DB中的列为空(即使您的constraints
块可能允许它),因为它知道它在代码中是不可能的。
如果您希望某个字段可以为空,那么您的代码必须允许该字段,以便以这种方式创建数据库。
另一个选项是将所有列的GORM默认值从nullable: false
更改为nullable: true
。