栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

HSQL + Hibernate异常:错误的列类型:发现:双精度,预期:浮点型

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

HSQL + Hibernate异常:错误的列类型:发现:双精度,预期:浮点型

这是由于 一系列不幸事件而发生的

  1. 问题始于HSQLDB不支持

    float
    数据类型的事实 。(是吗?是的,我知道,但是这里的文档。)

  2. 由于HSQLDB 在指定列时不会简单 失败

    float
    ,而是将其默默地重新解释为
    double
    ,从而使毫无疑问的程序员认为一切正常,这一问题开始变得棘手。因此,
    create table
    您可以在 语句中将列的类型指定为
    float
    ,HSQLDB将成功,但这只会引发您的麻烦,因为如果以后查询该列的类型,则会发现它
    double
    不是
    float

  3. 然后,hibernate后来发现此列为

    double
    ,而期望它为
    float
    ,并且它不够聪明,无法利用
    float
    从中 分配 的事实
    double
    。每个人都知道a
    double
    比a更好
    float
    ,因此hibernate状态应该很 高兴 它发现
    double
    所需的时间只是a
    float
    ,对吗?-但是没有,hibernate不会有任何事情:当它期望a时
    float
    ,只有a
    float
    会做。

  4. 然后,关于hibernate有一个有趣的事情,据说它具有对HSQLDB的内置支持,事实证明它包含一个

    class org.hibernate.dialect.HSQLDialect
    ,但 该方言并不关心您的浮点数。 因此,他们不认为数据类型不兼容是方言问题吗?他们从未用浮子测试过吗?我不知道该怎么办,但事实是HSQLDB的hibernate方言无法解决此问题。

所以,我们能做些什么?

解决该问题的一种可能方法是为HSQLDB创建我们自己的hibernate方言,在其中我们纠正了这一差异。

在过去,我遇到了MySQL和

boolean
vs.的类似问题
bit
,因此对于HSQLDB,我通过声明自己的HSQLDB方言来解决了
float
vs.问题。
double
对于hibernate:

public class FixedHsqlDialect extends HSQLDialect{    public FixedHsqlDialect()    {        registerColumnType( java.sql.Types.FLOAT, "double" );    }}

并如下使用它:

ejb3cfg.setProperty( "hibernate.dialect", FixedHsqlDialect.class.getName() );    //Instead of: org.hibernate.dialect.HSQLDialect.class.getName();


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/573482.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号