MySQLテーブルにBOOLEAN型(TINYINT(1))があり、エンティティのブールフィールドをマップしようとしていますが、これにより例外が生成されます。
org.hibernate.HibernateException: Wrong column type in maegul.users for column admin. Found: bit, expected: boolean
エンティティのフィールドをバイトに変更し、それぞれの変更を行ってブール値として機能するようにします。
org.hibernate.HibernateException: Wrong column type in maegul.users for column admin. Found: bit, expected: tinyint
フィールドで@Type
アノテーションを使用してみました:
@Type(type = "org.hibernate.type.NumericBooleanType")
しかし、私は得る:
org.hibernate.HibernateException: Wrong column type in maegul.users for column admin. Found: bit, expected: integer
私がここで読んだことから:
org.hibernate.HibernateException:列管理者のmaegul.usersの列タイプが間違っています。見つかった:ビット、期待された:整数
Hibernateは整数を期待しているようで、少し手に入れたようです。
これはあなたの注釈が正しいことを意味します:
@Type(type = "org.hibernate.type.NumericBooleanType")
ただし、データベースが更新されて整数ではなくビットに設定されたため、エラーが発生した可能性があります。
本当にTinyIntが必要な場合は、@Type
AND @Column
、整数として設定するには、タイプTinyIntの:
@Column(columnDefinition = "TINYINT")
@Type(type = "org.hibernate.type.NumericBooleanType")
public boolean admin = true;
BIT(1)
の代わりにTINYINT(1)
を使用する方が良い
@Column(nullable = false, columnDefinition = "BIT", length = 1)
private boolean flag = false;
これを試して:
<property name="isPaymentReceived" type="Java.lang.Boolean">
<column name="IS_PAYMENT_RECEIVED" sql-type="tinyint"/>
</property>
すべての場所で面倒なcolレベルの注釈を必要としないDialectから実行できます。
import org.hibernate.Hibernate;
import org.hibernate.dialect.PostgreSQLDialect;
import Java.sql.Types;
パブリッククラスPostgresCustomConversionDialectはPostgreSQLDialectを拡張します{
public PostgresCustomConversionDialect() {
super();
this.registerColumnType( Types.BIT, "numeric(1, 0)" );
this.registerColumnType( Types.BOOLEAN, "numeric(1, 0)" );
}
public String toBooleanValueString(boolean bool) {
return bool ? "1" : "0";
}
}
次に、このカスタム方言をpostgres方言として使用します-"hibernate.dialect"
MySQL接続文字列に「transformedBitIsBoolean = true」を追加することで、この問題を解決できました。
次の質問を参照してください: "Hibernate 4アップグレード後の「検出:ビット、予想:ブール値」
このフォーラムの投稿: https://hibernate.atlassian.net/browse/HHH-6935
Intとしてマッピングし、アクセサ(isAdmin)を使用してブール値を取得することの何が問題になっています。とにかく実際のタイプがわかりにくくなることを願っています。
Org.hibernate.type.BooleanTypeとしてマッピングすると動作する場合があります。
http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/types.html#types-value-basic を参照してください。
今日、Hibernateで同様の状況に陥り、mysqlデータ型がtinyint(1)になり、Hibernate型をブール値として宣言し、トリックを実行しました
@TypeアノテーションはJPAで使用する休止状態アノテーションです。ColumnDefiniton属性を使用できます。
@Column(nullable = false, columnDefinition = "TINYINT(1)")
private boolean isTrue;