文档章节

Found: decimal, expected: double precision

地瓜2013
 地瓜2013
发布于 2015/05/27 01:05
字数 623
阅读 39
收藏 0

场景:

老项目,只能查询数据库不能对其修改。。。所以hibernate anto 设置成 validate

异常: 

Hibernate: Found: decimal, expected: double precision

处理办法:

 

1、修改数据库字段,客户会杀死我的,抛弃。
2. 使用正确的对应方式改java对象: 当然如果你想一个一个的改的话,这是最好,最稳妥的办法。
   
    如果程序不继续抛出 Hibernate: Found: decimal, expected: double numric(19,0) 的话。

3. 读读异常名,方言发现decimal(当然我不知道什么意思),但是特么不影响理解,那就是类型不对了呗。
   
    引用牛逼的英语:
     
     Unless you define column type as double precision in DDL file, Oracle will it convert to float
     column type. So you need to register double as float column type in dialect class.
    
    public class Oracle10gDialectExtended extends Oracle10gDialect {

    public Oracle11gDialect() {
        super();
        registerColumnType(Types.DOUBLE, "float");
    }
    }  
    
    好吧,看在你可能不懂的份上,我翻译下,你要么写ddl文件定义到数据库列类别。或者你写java程序直接定义列。
    大概意思是:java程序和数据库接口类型对应不上了。那你定义就好了,就是写个方言的子类,在子类构造方法中
    定义你要解决的方案。
    
  4.把validate 改成 update (这是我最鄙视的)

  最终解决方案:

 public class FixSQLServerDialect extends SQLServerDialect{

	public FixSQLServerDialect(){
		super();
	
		registerColumnType( Types.DOUBLE, "decimal" );
		registerColumnType( Types.BIGINT, "decimal" );
		registerColumnType( Types.TINYINT, "decimal" );
      
    }
}

    备注:当然这不是好的解决方案,不是第二套 不修改其他不可控的文件。会出现重复定义指向的问题,不符合推广的概念

            

Hibernate: Found: decimal, expected: bit
和
Hibernate: Found: bit, expected: decimal
相互交替出现,就是你定义不是不定义也不是。。。这就需要你在这时候取舍,选的2套和3套结合的方式,修改java类属性
:就是boolean 改成 byte 或者其他能正常表示的,详见 下面java对象类型对应。
提醒:super()一定要加上,这是源码里面的构造函数,不要给自己制造未知麻烦。。


public SQLServerDialect() {
		registerColumnType( Types.VARBINARY, "image" );
		registerColumnType( Types.VARBINARY, 8000, "varbinary($l)" );
		registerColumnType( Types.LONGVARBINARY, "image" );
		registerColumnType( Types.LONGVARCHAR, "text" );
		registerColumnType( Types.BOOLEAN, "bit" );

		registerFunction( "second", new SQLFunctionTemplate( StandardBasicTypes.INTEGER, "datepart(second, ?1)" ) );
		registerFunction( "minute", new SQLFunctionTemplate( StandardBasicTypes.INTEGER, "datepart(minute, ?1)" ) );
		registerFunction( "hour", new SQLFunctionTemplate( StandardBasicTypes.INTEGER, "datepart(hour, ?1)" ) );
		registerFunction( "locate", new StandardSQLFunction( "charindex", StandardBasicTypes.INTEGER ) );

		registerFunction( "extract", new SQLFunctionTemplate( StandardBasicTypes.INTEGER, "datepart(?1, ?3)" ) );
		registerFunction( "mod", new SQLFunctionTemplate( StandardBasicTypes.INTEGER, "?1 % ?2" ) );
		registerFunction( "bit_length", new SQLFunctionTemplate( StandardBasicTypes.INTEGER, "datalength(?1) * 8" ) );

		registerFunction( "trim", new AnsiTrimEmulationFunction() );

		registerKeyword( "top" );
	}

 相关:hibernate aoto 设置

 相关:java.sql.types 类型对应  

 相关:参考外文博客解决方案

© 著作权归作者所有

共有 人打赏支持
地瓜2013
粉丝 2
博文 73
码字总数 8633
作品 0
大兴
程序员
私信 提问
SQL Server的小数数值类型(float 和 decimal)用法

在SQL Server中,小数数值实际上只有两种数据类型:float 和 decimal。double precision 整体是数据类型,等价于 float(53),real等价于float(24),应该避免在程序中直接使用 double precisi...

长征6号
2016/03/10
0
0
Mysql中,int(10)和int(11)的区别

int(M) M指示最大显示宽度。最大有效显示宽度是255。显示宽度与存储大小或类型包含的值的范围无关 首先说一下mysql的数值类型,MySQL支持所有标准SQL数值数据类型。这些类型包括严格数值数据...

qwergkp
11/07
0
0
Mysql中,int(10)和int(11)的区别

int(M) M指示最大显示宽度。最大有效显示宽度是255。显示宽度与存储大小或类型包含的值的范围无关 首先说一下MySQL的 数值类型,MySQL支持所有标准SQL数值数据类型。这些类型包括严格数值数据...

bengozhong
2016/12/09
141
0
mysql常用数据类型的使用方式--数值型

1) BIGINT [(display_size)] [AUTO_INCREMENT] [UNSIGNED] [ZEROFILL] 存储大小:8字节 描述:最大整数类型(-9223372036854775808到9223372036854775807,无符号为0到1844674407370955161......

noteman
2015/12/04
18
0
DWS和各异构数据库的差异对比

类型名称 DWS建表类型 Impala建表类型 2字节整数 SMALLINT SMALLINT 4字节整数 INTEGER INT 8字节整数 BIGINT BIGINT 单精度浮点数 FLOAT4 (REAL) FLOAT 双精度浮点型 FLOAT8(DOUBLE PRECIS...

晨曦美
04/03
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Ubuntu16.04下安装docker

[TOC] 本文开发环境为Ubuntu 16.04 LTS 64位系统,通过apt的docker官方源安装最新的Docker CE(Community Edition),即Docker社区版,是开发人员和小型团队的理想选择。 1. 开始安装 1.1 由于...

豫华商
今天
10
0
使用XShell工具密钥认证登录Linux系统

如果你是一名Linux运维,那么Linux服务器的系统安全问题,可能是你要考虑的,而系统登录方式有两种,密码和密钥。哪一种更加安全呢? 无疑是后者! 这里我为大家分享用Xshell利器使用密钥的方...

dragon_tech
今天
8
0
day178-2018-12-15-英语流利阅读-待学习

“真蛛奶茶”了解一下?蜘蛛也会产奶了 Lala 2018-12-15 1.今日导读 “蛋白质含量是牛奶的 4 倍,并有着更低的脂肪和含糖量”,听起来诱人又美味的并不是羊奶或豆奶,而是你可能打死都想不到...

飞鱼说编程
今天
12
0
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents

场景重现 npm install --verbose 安装依赖的时,出现如下警告 npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@1.2.4 (node_modules\fsevents):npm WARN notsup SKIPPING OPTIONA......

taadis
今天
2
0
OSChina 周六乱弹 —— 你一口我一口多咬一口是小狗

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @达尔文 :分享Roy Orbison的单曲《She's a Mystery to Me》 《She's a Mystery to Me》- Roy Orbison 手机党少年们想听歌,请使劲儿戳(这里...

小小编辑
今天
495
6

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部