2011-12-25 11 views
3

私はmysqlでgrails 2.0を使用しています。いくつかのドメイン属性をnullにする必要があります。私は自分のドメインクラスで :私のGrailsのアプリを起動した後Grails 2.0でnull許容制約を取得する方法は?

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

は、それがcorrespondendingのSQLを作成しますが、私のmysqlのテーブルに、属性がNULL可能ではありません、彼らは「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属性は "NULL"でなく "NULL"ではないのですか?私はそれらを "NULL"にしたい。私のミスはどこですか?

+1

MySQLでテーブルlookup_queryを削除し、Grails 2.0を再度実行して、アプリケーションの起動時にテーブルが再作成されていることを確認します。テーブルフィールドがまだNULLでない場合は、LookupQueryドメインクラスコード全体を共有してください。 –

+0

これは動作しません。私は問題に近づいています。 Hibernateは、データベースのLong属性をnullにできません。文字列ではすべて正常に動作しますが、ロングアトリビュートではHibernateはそれらをデータベースでnullableにしません...これは休止状態のバグですか? – whitenexx

+2

「長い競合相手」ではなく「長い競合相手」と宣言してください。 –

答えて

1

違いは、箱入りタイプと箱なしタイプの違いです。ボックス化された型はクラスであるため、ヌル参照になり得ますが、非ボックス化型は「プリミティブ」であり、null値を保持できません。 GORMはこれを認識して、プリミティブ型のnull値を持つことができないことを知っているので、DB内の列が空であることを知っているので(たとえあなたのconstraintsブロックで許可されていても)コード内で可能です。

フィールドをNULL可能にしたい場合、コードでは、データベースをそのように作成するためにフィールドを許可する必要があります。

また、GORMのデフォルト値をnullable: falseからnullable: trueに変更することもできます。

関連する問題