Hibernateで列を追加しています。もちろん、hibernate.hbm2ddl.autoプロパティは "update"に設定されています。変更されていないクラスは、次のようになります。Hiberateは、プリミティブ型フィールドの列をNonNullableとして追加します。
@Entity
public class Foo {
@Id
@GeneratedValue
private int id;
public Foo() {
}
}
変更クラスは次のようになります。
私は、エラー、次の取得上記のように、私は、プリミティブ型の列を追加してい@Entity
public class Foo {
@Id
@GeneratedValue
private int id;
private int newValue = 0;
public Foo() {
}
}
:
Caused by: ERROR 42601: In an ALTER TABLE statement, the column 'NEWVALUE' has been specified as NOT NULL and either the DEFAULT clause was not specified or was specified as DEFAULT NULL.
@Column API "には、列注釈が指定されていない場合、デフォルト値が適用されるため、理由は疑問です。"とデフォルト値のfo rヌル可能属性は "true"です。
奇妙です - 私は文字列または他のオブジェクトのエラーを取得しません。古い行には単に "null"が置かれます。また、nullableをtrueに排他的に設定すると、プリミティブ型のエラーは発生しません。
private String newValue = "0"; //Gives no error
private String newValue; //Gives no error
@Column (nullable = true)
private int newValue; // Gives no error
結論として、hibernateはプリミティブの列をデフォルトではnullでないものとして設定します。列を追加すると、エラーをスローする新しい列の値を持たないレガシー行がいくつかあります。
毎回@Column(nullable = true)を排他的に設定せずにこの動作をグローバルに変更できるかどうかは疑問です。