Oracle Float双精度数据类型到Java Double数据类型的映射存在问题。使用Java Double数据类型时,hibernate模式验证器似乎失败。
org.hibernate.HibernateException: Wrong column type in DB.TABLE for column amount. Found: float, expected: double precision
避免这种情况的唯一方法是禁用架构验证,并希望架构与即将运行的应用程序同步。在投入生产之前,必须对其进行修复。
应用程序的环境: -Grails 1.2.1 -Hibernate-core 3.3.1.GA -Oracle 10g
需要更多信息。桌子是双人床吗?我不熟悉Oracle,但这是浮点类型吗?java.sql.Types它翻译成什么类型?您可以在java.sql.Types数据库的方言类中看到到数据库类型的映射。在这种情况下org.hibernate.dialect.Oracle10gDialect(扩展9i和8i)。看起来你有
java.sql.Types
org.hibernate.dialect.Oracle10gDialect
registerColumnType( Types.DOUBLE, "double precision" );
因此,通常需要将表定义为double precision,并将java类定义为将映射到的对象。Types.Double``double
double precision
Types.Double``double
从错误消息看来,您的表已定义为float将使用此映射的表
float
registerColumnType( Types.FLOAT, "float" );
为此Types.FLOAT,通常期望的java类型将映射到该类型float; 单个精度值。
Types.FLOAT
最简单的方法是更改表或java类以使其匹配。或者,您可以指定将单个精度值映射到双精度值的用户类型。我想不出为什么您会真正想要这样做,但是我想,也许如果您无法同时控制类和表,那是非常罕见的。
hth。