这个错误困扰了我一天的时间,如今写出来但愿之后你们遇到这样的错误时,但愿对你们有帮助。首先介绍一下使用的情景,个人项目的spring和hibernate搭建服务端对数据库进行插入的操做,因为历史缘由,所操做的数据表的列过多,大概超过100个字段,因此决定利用hibernate Tools进行代码生成。生成mapping文件后,进行插入操做时就出现了这个错误:ORA-00932: 数据类型不一致: 应为 NUMBER, 但却得到 BINARY; spring
看到这个错误第一反应固然是找google大神,结果找了几篇stackoverflow,发现出现的问题不太类似,遂放弃。没办法决定利用笨办法一个一个试了,这个数据类型错误首先让人联想到的是:将null赋给了某个number类型的字段,结果证实这样的想法很荒诞。利用hibernate进行orm时,任何number所对应的Integer、Long 等这些wrapper类型,若是被赋值为null,hibernate是有自身的机制进行操做,所以不存在这样的问题,通过实验使用也否认了这个缘由。后来又看到一篇博客,说date类型赋值为null会出现这样的问题,结果试了一下貌似不会。仔细一想抛出的错误是得到了binary,可以接收到binary最为可能性的途经就是某个字节流或者序列化的类,沿着这个思路,检查了一下hbm.xml文件,发现oracle中的timestamp类型都被映射成了Serializable类型,遂觉问题之所在,看来使用自动生成真的须要当心一点,因而改动了一下*.reveng.xml sql
<type-mapping> <sql-type jdbc-type="OTHER" hibernate-type='date'/> </type-mapping>
按图索骥把类型映射改成date后,问题解决。 数据库