這個錯誤困擾了我一天的時間,如今寫出來但願之後你們遇到這樣的錯誤時,但願對你們有幫助。首先介紹一下使用的情景,個人項目的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後,問題解決。 數據庫