これが私のJPA2 / Hibernateの定義です:
Code:
@Column(nullable = false)
private boolean enabled;
MySql では、この列は bit(1) データ型に解決されますが、これはうまくいきません。レガシーの問題については、ブール値をビットではなく tinyint にマップする必要があります。しかし、デフォルトのデータ型を変更する可能性はありません。ありますか?
@Type アノテーションは Hibernate アノテーションです。
完全な JPA2 ( Hibernate 3.6+を使用) では、ブール型フィールドを BIT(1) ではなく TINYINT(1) SQL タイプにマップする方法は、 columnDefinition 属性を使用することです。
@Column(nullable = false, columnDefinition = "TINYINT(1)")
private boolean enabled;
注意: この場合、長さ属性は効果がないように思われるため、(1) 構文を使用します。
Hibernate 4.0+では、この種の構文により、次のようなランタイム エラーが発生する可能性があります。
Wrong column type Found: bit, expected: TINYINT(1)
この場合、唯一の方法は、次のように MySQL データソース接続文字列でtinyInt1isBit=falseを使用することです。
jdbc:mysql://server_host:3306/database?tinyInt1isBit=false
ところで、次のように length 属性を使用できるようになりました。
@Column(nullable = false, columnDefinition = "TINYINT", length = 1)
private boolean enabled;
を試してくださいNumericBooleanType
。何らかの理由で、これには宣言された短い型名がないため、次を使用する必要があります。
@Column(nullable = false)
@Type(type = "org.hibernate.type.NumericBooleanType")
private boolean enabled;
これは INTEGER 型にマップされますが、おそらく TINYINT で問題なく動作します。
更新:一部の RDBMS では TINYINT ではorg.hibernate.type.NumericBooleanType
機能しません。データベースの列の型を INTEGER に切り替えます。または、必要に応じて別の Java @Type 値または columnDefinition を使用します。
この例では、Dude の答えは@Column(nullable = false, columnDefinition = "TINYINT(1)")
、データベースを変更しなくても機能します。
私はこのエラーがありました:
原因: org.springframework.beans.factory.BeanCreationException: ServletContext リソース [/WEB-INF/config/context-config.xml] で定義された名前 'sessionFactory' の Bean を作成中にエラーが発生しました: init メソッドの呼び出しに失敗しました。ネストされた例外は org.hibernate.MappingException です: 次のタイプを特定できませんでした: org.hibernate.type.NumericBooleanType、テーブル: bookingItem、列: [org.hibernate.mapping.Column(enabled)]
そして、これは私のために働いた:
@Column(nullable = false, columnDefinition = "TINYINT(1)")
private boolean enabled;