ORA-00932: 数据类型不一致: 应为 NUMBER, 但却获得 BINARY

这个错误困扰了我一天的时间,现在写出来希望以后大家遇到这样的错误时,希望对大家有帮助。首先介绍一下使用的情景,我的项目的spring和hibernate搭建服务端对数据库进行插入的操作,由于历史原因,所操作的数据表的列过多,大概超过100个字段,所以决定利用hibernate Tools进行代码生成。生成mapping文件后,进行插入操作时就出现了这个错误:ORA-00932: 数据类型不一致: 应为 NUMBER, 但却获得 BINARY;

看到这个错误第一反应当然是找google大神,结果找了几篇stackoverflow,发现出现的问题不太相似,遂放弃。没办法决定利用笨办法一个一个试了,这个数据类型错误首先让人联想到的是:将null赋给了某个number类型的字段,结果证明这样的想法很荒诞。利用hibernate进行orm时,任何number所对应的Integer、Long 等这些wrapper类型,如果被赋值为null,hibernate是有自身的机制进行操作,因此不存在这样的问题,经过实验使用也否定了这个原因。后来又看到一篇博客,说date类型赋值为null会出现这样的问题,结果试了一下貌似不会。仔细一想抛出的错误是获得了binary,能够接收到binary最为可能性的途经就是某个字节流或者序列化的类,沿着这个思路,检查了一下hbm.xml文件,发现oracle中的timestamp类型都被映射成了Serializable类型,遂觉问题之所在,看来使用自动生成真的需要小心一点,于是改动了一下*.reveng.xml

<type-mapping>
	<sql-type jdbc-type="OTHER" hibernate-type='date'/>
</type-mapping>

按图索骥把类型映射改为date后,问题解决。

你可能感兴趣的:(ORA-00932: 数据类型不一致: 应为 NUMBER, 但却获得 BINARY)