Как получить обнуляемые ограничения с Grails 2.0? - PullRequest
3 голосов
/ 25 декабря 2011

Я использую 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". Где моя ошибка?

1 Ответ

1 голос
/ 06 января 2012

Разница заключается в том, что в штучной упаковке и без коробки типов. Тип в штучной упаковке является классом и, следовательно, может быть пустой ссылкой, в то время как неупакованный тип является «примитивным» и не может содержать нулевое значение. GORM распознает это и знает, что вы просто не можете иметь нулевое значение для примитивного типа, поэтому он не позволяет столбцам в БД быть нулевыми (даже если ваш блок constraints может это разрешить), поскольку знает, что это не невозможно в коде.

Если вы хотите, чтобы поле обнулялось, ваш код должен позволять ему быть таким, чтобы база данных создавалась таким образом.

Другой вариант - изменить значение GORM по умолчанию с nullable: false на nullable: true для всех столбцов.

...