web-dev-qa-db-ja.com

Hibernateのプロパティのデフォルト値の設定が機能しない

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

@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を取得します。

何かアイデアはありますか?重要な場合は、MySQLサーバー5.1を使用します。どんな助けにも感謝します。前もって感謝します!

16
Philiph Bruno

BOOLEANデータ型を使用して、@Columnそのような注釈:

@Column(name = "IS_ACTIVE", columnDefinition = "boolean default true", nullable = false)
private Boolean active = true;
36
Aleksandr M

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

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

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

1
Peter T.