web-dev-qa-db-ja.com

ブール値の休止状態としてtinyintをマップします

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
29
Alvin Baena

私がここで読んだことから:

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;
36
Cyril N.

BIT(1)の代わりにTINYINT(1)を使用する方が良い

@Column(nullable = false, columnDefinition = "BIT", length = 1)
private boolean flag = false;
7
am0wa

これを試して:

  <property name="isPaymentReceived" type="Java.lang.Boolean">
  <column name="IS_PAYMENT_RECEIVED" sql-type="tinyint"/>
</property>
2
Piraba

すべての場所で面倒な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"

1
Mudit Verma

MySQL接続文字列に「transformedBitIsBoolean = true」を追加することで、この問題を解決できました。

次の質問を参照してください: "Hibernate 4アップグレード後の「検出:ビット、予想:ブール値」

このフォーラムの投稿: https://hibernate.atlassian.net/browse/HHH-6935

1
Matthias Wuttke

Intとしてマッピングし、アクセサ(isAdmin)を使用してブール値を取得することの何が問題になっています。とにかく実際のタイプがわかりにくくなることを願っています。

0
Thom

Org.hibernate.type.BooleanTypeとしてマッピングすると動作する場合があります。

http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/types.html#types-value-basic を参照してください。

0
Daan

今日、Hibernateで同様の状況に陥り、mysqlデータ型がtinyint(1)になり、Hibernate型をブール値として宣言し、トリックを実行しました

0
JavaMan

@TypeアノテーションはJPAで使用する休止状態アノテーションです。ColumnDefiniton属性を使用できます。

@Column(nullable = false, columnDefinition = "TINYINT(1)")
private boolean isTrue;
0
Ali Arda Orhan