質問

私は、Javaのダブルデータ型へのOracleフロート倍精度データ型のマッピングに問題があります。休止状態スキーマ・バリは、Javaダブルデータ型が使用されているときに失敗するようです。

org.hibernate.HibernateException: Wrong column type in DB.TABLE for column amount. Found: float, expected: double precision

これを回避する唯一の方法は、無効スキーマ検証にあり、スキーマが実行さ約アプリと同期している願っています。それが生産に出かける前に、それは固定されている必要があります。

アプリケーションのevironment:
- Grailsの1.2.1
- Hibernateはコア3.3.1.GA
- Oracleの10グラム

役に立ちましたか?

解決

より多くの情報が必要。テーブルには、二重のですか?私は、Oracleに精通していないんだけど、それは浮動小数点型ですか?それは何にjava.sql.Typesタイプを翻訳していますか?あなたは、データベースの方言クラスのデータベースタイプへのマッピングjava.sql.Typesを見ることができます。この場合、(9iおよび8iの延び)org.hibernate.dialect.Oracle10gDialectあります。あなたのように見えますが、

を持っています
registerColumnType( Types.DOUBLE, "double precision" );

だから、テーブルがdouble precisionのように定義する必要があり、JavaクラスのニーズがTypes.Double、通常doubleにマップされます何かのように定義される。

あなたのテーブルがfloatのように定義されるように

は、エラーメッセージからは、

このマッピングを使用しているに見えます
registerColumnType( Types.FLOAT, "float" );

予測されるJavaの種類は通常Types.FLOATfloatにマップするものになるだろうれます。単精度値

一番簡単な方法は、どちらかの試合にあなたのテーブルまたはJavaクラスを変更です。別の方法として、あなたは倍精度値を単精度値をマップするユーザタイプを指定することができます。あなたはクラスと非常にまれである、テーブル、両方のコントロールを持っていなかった場合、私は、私が思うだろう、多分、あなたは本当にそれをしたいと思う理由を考えることはできません。

HTHます。

他のヒント

あなたはDDLファイルにdouble precisionとして列の型を定義する場合を除き、

、Oracleはfloatカラム型に変換します。あなたがそう方言クラスでフロート列型としてdoubleを登録する必要があります。

public class Oracle10gDialectExtended extends Oracle10gDialect {

    public Oracle10gDialectExtended() {
        super();
        registerColumnType(Types.DOUBLE, "float");
    }
}

最後Oracle10gDialectExtendedとしてのHibernate / JPA構成でhibernate.dialectを登録します。

あなたは注釈メソッドを使用している場合は、

、あなたはフィールドに以下のように列の型を宣言する必要があります。

@Column(name = "PERFORMANCE", columnDefinition = "FLOAT(5,2)")
private double performance;

私たちは、同じ問題がありました。私たちはこのように、マッピングで明示的に設定列の型に確認することによってそれを解決します:

<property name="performance" type="double">
  <column name="PERFORMANCE" sql-type="float" />
</property>

私はOracleの列型がNUMBERだったとJavaの型がdoubleたケースがあった。

最後に、それは設定

に押されていたことをトレースします

<property name="hbm2ddl.auto">validate</property>

だけ

にそれを変更しました

<property name="hbm2ddl.auto">update</property>

、すべてが働いた!

JBossの4 /休止3アプリにAS7 / hibernate4移行する際に私はこの問題を持っていました。問題は、レガシーコードを変更することなく、更新に検証からhbm2ddl.autoを変更するロブKeiltyの提案によって解決ます。

  

application.properties

hibernate.dialect=com.test.config.Oracle10gDialectExtended

  

クラスを作成します
package com.test.config;

import java.sql.Types;

import org.hibernate.dialect.Oracle10gDialect;

public class Oracle10gDialectExtended extends Oracle10gDialect {

    public Oracle10gDialectExtended() {
        registerColumnType(Types.DOUBLE, "float");
    }
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top