一尘不染

Hibernate:发现:浮动,预期:双精度

hibernate

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


阅读 231

收藏
2020-06-20

共1个答案

一尘不染

需要更多信息。桌子是双人床吗?我不熟悉Oracle,但这是浮点类型吗?java.sql.Types它翻译成什么类型?您可以在java.sql.Types数据库的方言类中看到到数据库类型的映射。在这种情况下org.hibernate.dialect.Oracle10gDialect(扩展9i和8i)。看起来你有

registerColumnType( Types.DOUBLE, "double precision" );

因此,通常需要将表定义为double precision,并将java类定义为将映射到的对象。Types.Double``double

从错误消息看来,您的表已定义为float将使用此映射的表

registerColumnType( Types.FLOAT, "float" );

为此Types.FLOAT,通常期望的java类型将映射到该类型float; 单个精度值。

最简单的方法是更改​​表或java类以使其匹配。或者,您可以指定将单个精度值映射到双精度值的用户类型。我想不出为什么您会真正想要这样做,但是我想,也许如果您无法同时控制类和表,那是非常罕见的。

hth。

2020-06-20