程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了HSQL + Hibernate异常:错误的列类型:发现:双精度,预期:浮点型大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

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

开发过程中遇到HSQL + Hibernate异常:错误的列类型:发现:双精度,预期:浮点型的问题如何解决?下面主要结合日常开发的经验,给出你关于HSQL + Hibernate异常:错误的列类型:发现:双精度,预期:浮点型的解决方法建议,希望对你解决HSQL + Hibernate异常:错误的列类型:发现:双精度,预期:浮点型有所启发或帮助;

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

  1. 问题始于HSQLDB不支持float数据类型的事实 。(是吗?是的,我知道,但是这里的文档。)

  2. 由于HSQLDB 在指定列时不会简单 float,而是将其默默地重新解释为double,从而使毫无疑问的程序员认为一切正常,这一问题开始变得棘手。因此,create table您可以在 语句中将列的类型指定为 floatHSQLDB将成功,但这只会引发您的麻烦,因为如果以后查询该列的类型,则会发现它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和Booleanvs.的类似问题bit,因此对于HSQLDB,我通过声明自己的HSQLDB方言来解决了floatvs.问题。double对于hibernate:

/**
 * 'Fixed' HSQL Dialect.
 *
 * PEARL: HSQL seems to have a problem with floats.  We remedy this here.
 * See https://stackoverflow.com/q/28480714/773113
 *
 * PEARL: this class must be public, not package-private, and it must have a 
 * public constructor, otherwise hibernate won't be able to instantiate it.
 */
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();

解决方法

我将内存中的HSQLHSQLDB)与Hibernate一起用于所有单元测试,因为它非常快。我有一个表,其中的列定义如下:

float qw;

hibernate启动时,出现以下错误:

org.hibernate.HibernateException: Wrong column type in myTable for column qw. 
Found: double,expected: float

为什么double在将列声明为时找到float

大佬总结

以上是大佬教程为你收集整理的HSQL + Hibernate异常:错误的列类型:发现:双精度,预期:浮点型全部内容,希望文章能够帮你解决HSQL + Hibernate异常:错误的列类型:发现:双精度,预期:浮点型所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。