私はこの強力なツールを学ぶためにgrailsを使って個人的なプロジェクトを開発しています。 自分のドメインクラスに「ポスト」の2つの新しいフィールド(x、y)を追加するとき、私は、この問題が発生していますGrailsはnullの代わりにnullを使用してテーブルを変更します
class Post {
long id;
Date creationDate;
String text;
byte[] image;
Style style;
long likeCount;
long dislikeCount;
User owner;
//coordinates on the wall
int x;
int y;
//this is probably to remove
static hasMany = [judgment : Judgment];
static constraints = {
text(nullable:true, maxSize:5000);
image(nullable:true, maxSize:1000000);
creationDate(nullable:true);
x(nullable:true);
y(nullable:true);
}
}
私はPostgresデータベースの一部のデータ(ポストレコード)を作成した後、私はxとyを追加しました。 しかし、私は実行アプリ際のGrailsでは、このエラーをコンソールが起動します:私は、x、yがNULL可能であることを制約の中で宣言するので
| Error 2012-03-04 12:04:23,670 [pool-5-thread-1] ERROR hbm2ddl.SchemaUpdate - Unsuccessful: alter table post add column x int4 not null
| Error 2012-03-04 12:04:23,672 [pool-5-thread-1] ERROR hbm2ddl.SchemaUpdate - ERROR: column "x" contains null values
これは非常に奇妙な..ですので、Grailsのが私のテーブル宣言のxを変更しようとする理由とyがnullでないようにするには?
あなたはとても感謝しています。常にプリミティブでない値を使う方が良いと思いますか?データベーススキーマを変更して新しいフィールドを追加する必要があると仮定します。非プリミティブ型を使用すると、既存のレコードのデフォルト値がnullになるため、この問題を回避する必要があります。 – Giuseppe