栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > 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号