Caused by: java.sql.SQLException: 無法轉換為內部表示解決方法

徐豪傑發表於2013-05-31

Hibernate應用有三種開發方式:

自底向上從資料庫到持久化類;
自頂向下從持久化類到資料庫表;
從中間出發向上和向下同時發展。                                                  

如果從下往上開發,使用Database Explorer反向生成PO,其中的配置檔案並不那麼智慧,比如如下規則

NUMBER(1)~NUMBER(18) 都可以使用 Long 來對映 一般 NUMBER(1)~NUMBER(9) 使用 Integer 對映 NUMBER(10)~NUMBER(18) 使用 Long 來對映 大於 NUMBER(18) 的只能用 BigInteger (出自http://bbs.csdn.net/topics/310225381

這些規則實際上是不會反映到配置檔案中去的 所以會導致資料庫裡的欄位型別與Java裡對映該欄位屬性的型別不能對應轉換,出現 java.sql.SQLException

其實深層次的原因就是不同的資料庫和程式語言,一樣的資料儲存方式不同,格式也會大同小異,解決方法就是保持資料庫底層和程式語言中資料型別的對應。

一般這種情況下你得檢查你的配置檔案

java型別與資料庫型別是否匹配?(參看[oracle資料型別和對應的java型別][2])

其他POJO是否與當前所查詢的屬性有關聯,有那麼在配置檔案中會有一對多或多對一的關係,修改為對應的java型別即可

在POJO中屬性的資料型別為Long,但是這個屬性的getxxx()方法返回的型別卻為long,而非Long,程式不會報錯,但執行時會出錯。(如果對資料庫進行操作時,沒有涉及到的屬性,即使配置檔案或者POJO資料型別出錯也不會有問題,但一旦涉及,若型別不匹配,則會出現錯誤)

建議反向工程生成PO時檢查資料型別,設定對應格式。

原文連結:杏林極客-Caused by: java.sql.SQLException: 無法轉換為內部表示解決方法

相關文章