これが私のJPA2/Hibernateの定義です。
Code:
@Column(nullable = false)
private boolean enabled;
MySqlでは、この列はbit(1)データ型に解決されます-これは私には機能しません。レガシーの問題については、ブール値を少しではなくtinyintにマップする必要があります。しかし、デフォルトのデータ型を変更する可能性はありません。何かありますか?
NumericBooleanType
を試してください。何らかの理由で、これには短い型名が宣言されていないため、使用する必要があります。
_@Column(nullable = false)
@Type(type = "org.hibernate.type.NumericBooleanType")
private boolean enabled;
_
これはINTEGER型にマップされますが、TINYINTでおそらくうまく機能します。
更新:_org.hibernate.type.NumericBooleanType
_はnotが一部のRDBMSでTINYINTで動作します。データベースの列タイプをINTEGERに切り替えます。または、別のJava @Type値、またはcolumnDefinitionを適宜使用します。
この例では、@Column(nullable = false, columnDefinition = "TINYINT(1)")
に対するDudeの回答は、データベースを変更しなくても機能します。
@TypeアノテーションはHibernateアノテーションです。
完全なJPA2(Hibernate 3.6 +)で、ブールフィールドをBIT(1)ではなくTINYINT(1)SQLタイプにマップする方法は、columnDefinition属性を使用することです。
@Column(nullable = false, columnDefinition = "TINYINT(1)")
private boolean enabled;
nb:この場合、長さ属性は効果がないようであるため、(1)構文を使用します。
Hibernate 4.0 +を使用すると、この種の構文は次のような実行時エラーを引き起こす可能性があります。
Wrong column type Found: bit, expected: TINYINT(1)
この場合、唯一の方法はtinyInt1isBit = falseをMySQLデータソース接続文字列で次のように使用することです:
jdbc:mysql://server_Host:3306/database?tinyInt1isBit=false
ところで、次のようにlength属性を使用できるようになりました。
@Column(nullable = false, columnDefinition = "TINYINT", length = 1)
private boolean enabled;
MySQLデータベースでJPAとSpring Data/Hibernate 5.0を使用しています。
私のEntityオブジェクトには、次のものを入れました。
@Column(name = "column_name", columnDefinition = "BOOLEAN")
private Boolean variableName;
私の開発環境では、hibernate auto-ddlがupdateに設定されているため、devにデプロイすると、tinyint(1)型のcolumn_nameでテーブルが作成されました。
この列を使用する私のコードはnullをfalseとみなしますので、nullを心配していません。もしあなたがそれをプリミティブなブール値にしたり、Columnアノテーションに「、nullable = false」を追加したりできます。
このソリューションは完全にJPA(hibernate Typeアノテーションを使用しない)であり、接続文字列を変更する必要はありません。
私はこのエラーがありました:
原因: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;
Microsoft SQLと一部のバージョンのmysqlを使用する場合、次を使用します。
@Column(name = "eanbled", columnDefinition = "bit default 0", nullable = false)
private boolean enabled;
私にとって、tinybit、boolean、およびその他のそのような定義は失敗しました。