大佬教程收集整理的这篇文章主要介绍了HSQL + Hibernate异常:错误的列类型:发现:双精度,预期:浮点型,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
这是由于 一系列不幸事件而发生的 。
问题始于HSQLDB不支持float
数据类型的事实 。(是吗?是的,我知道,但是这里的文档。)
由于HSQLDB 在指定列时不会简单 float
,而是将其默默地重新解释为double
,从而使毫无疑问的程序员认为一切正常,这一问题开始变得棘手。因此,create table
您可以在 语句中将列的类型指定为 float
,HSQLDB将成功,但这只会引发您的麻烦,因为如果以后查询该列的类型,则会发现它double
不是float
。
然后,hibernate后来发现此列为double
,而期望它为float
,并且它不够聪明,无法利用float
可 从中 分配 的事实double
。每个人都知道a double
比a更好float
,因此hibernate状态应该很 高兴 它发现double
所需的时间只是a float
,对吗?-但是没有,hibernate不会有任何事情:当它期望a时float
,只有a float
会做。
然后,关于hibernate有一个有趣的事情,据说它具有对HSQLDB的内置支持,事实证明它包含一个 class org.hibernate.dialect.HSQLDialect
,但 因此,他们不认为数据类型不兼容是方言问题吗?他们从未用浮子测试过吗?我不知道该怎么办,但事实是HSQLDB的hibernate方言无法解决此问题。
所以,我们能做些什么?
解决该问题的一种可能方法是为HSQLDB创建我们自己的hibernate方言,在其中我们纠正了这一差异。
在过去,我遇到了MysqL和Boolean
vs.的类似问题bit
,因此对于HSQLDB,我通过声明自己的HSQLDB方言来解决了float
vs.问题。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();
以上是大佬教程为你收集整理的HSQL + Hibernate异常:错误的列类型:发现:双精度,预期:浮点型全部内容,希望文章能够帮你解决HSQL + Hibernate异常:错误的列类型:发现:双精度,预期:浮点型所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。