18

エンティティにブールプロパティがあります。これが私の注釈です:

@Column(name = "IS_ACTIVE", nullable = false, columnDefinition="BIT DEFAULT 1", length = 1)
public Boolean getActive() {
    return isActive;
}

しかし、columnDefinition="BIT DEFAULT 1"完全には機能しません。生成されたテーブルの結果として取得するSQLコードは次のとおりです。

IS_ACTIVE BIT(1) NOT NULL,

私は何が間違っているのですか?

したがって、このクラスのインスタンスをデータベースに保存しようとすると、例外が発生します。

`com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Column 'IS_ACTIVE' cannot be null`

nullable = falseプロパティを削除した場合:

@Column(name = "IS_ACTIVE", columnDefinition="BIT DEFAULT 1", length = 1)
public Boolean getActive() {
    return isActive;
}

この場合、作成したオブジェクトを保存できます。しかし、それでもデフォルト値は設定されておらず、データベースのこのフィールドの値でNULLを取得します。

何かアイデアはありますか?重要な場合は、MySQLServer5.1を使用します。助けていただければ幸いです。前もって感謝します!

4

2 に答える 2

38

BOOLEANデータ型を使用してみて、次の@Columnように注釈を定義します。

@Column(name = "IS_ACTIVE", columnDefinition = "boolean default true", nullable = false)
private Boolean active = true;
于 2012-11-27T22:13:39.933 に答える
2

このリンクの正解への参照Hibernateでデフォルト値を設定する方法

実際のデータベースのデフォルト値が必要な場合は、columnDefinition-@Column(name =“ myColumn”、nullable = false、columnDefinition =“ int default 100”)を使用します。columnDefinitionの文字列はデータベースに依存することに注意してください。このオプションを選択した場合も同様です。 、動的挿入を使用する必要があるため、Hibernateは挿入時にnull値の列を含めません。それ以外の場合、デフォルトについて話すことは関係ありません。

ソリューションの鍵は、動的挿入注釈です。次の例のように、エンティティクラスに追加できます。@org.hibernate.annotations.Entity(dynamicInsert = true)

于 2014-04-30T10:12:36.033 に答える