3

我将 grails 2.0 与 mysql 一起使用,我希望某些域属性可以为空。在我的域类中,我做了:

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

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

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”。我的错误在哪里?

4

1 回答 1

1

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

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

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

于 2012-01-06T15:53:29.687 回答