標籤:weblogic jdbc timestamp java.sql.date weblogic hibernate java.sql.timestamp cannot be cast to java.sql.date
項目需要切換伺服器,從server2003切換到server2008上,新環境用的weblogic11_64、Oracle11g
項目部署運行之後,其他一切正常,只有涉及到查詢date類型的資料庫欄位時,會報以下錯誤:
java.lang.ClassCastException: java.sql.Timestamp cannot be cast to java.sql.Date
按照一般思路,這個異常,是代碼中存在類型的強制轉換,只要把強制轉換的地方修改成合理的類型轉換邏輯就可以了。
但是考慮到在系統遷移的過程中,並沒有做任何的代碼改動,既然舊環境可以正常執行這段代碼,新環境報錯,可能是在切換過程中有相容性或者jar包衝突的問題。
解決過程如下:
一、問題定位
1、懷疑的是jdk版本問題,於是在我本機更換相同版本的jdk,結果本地運行正常,排除jdk原因; 2、懷疑是oracle版本的問題,本機串連新環境資料庫,運行正常,排除orale版本問題;
3、本地安裝同樣版本的weblogic,配置JNDI並部署本地部署套件,運行,出現同樣問題,問題定位!
二、問題分析
報錯位置為Hibernate查詢結果的處理,Hibernate將查詢結果封裝成List<Map>類型,可能是Hibernatejar包的問題,但是在配置weblogic環境的時候,已經根據資料將Hibernate的antlr-2.7.6.jar進入到了StartWebLogic.cmd檔案中,所以懷疑是weblogic中JDBC驅動包的問題,按照配置antlr-2.7.6.jar的方式把JDBC驅動包重新引用應該可以解決!
三、解決步驟(把Hibernatejar的配置一同寫進來,方便以後配置,該部分參考了其他資料)
1、找到antlr-2.7.6.jar和ojdbc14.jar(直接從WEB-INF\lib目錄下拷貝)
2、將其複製到weblogic的安裝目錄下$weblogic_root$\wlserver_10.3\server\lib(理論上可以是其它的任何目錄)
3、在weblogic安裝目錄下找到
$weblogic_root$\user_projects\domains\base_domain\bin\StartWebLogic.cmd檔案
4、用文字編輯器開啟StartWebLogic.cmd,找到
set CLASSPATH=%SAVE_CLASSPATH%
set SAVE_CLASSPATH=
在前面兩行之間增加以下配置
@REM hibernate3
set PRE_CLASSPATH=%WL_HOME%\server\lib\antlr-2.7.6.jar;%WL_HOME%\server\lib\ojdbc14.jar
set CLASSPATH=%PRE_CLASSPATH%;%CLASSPATH%
5、儲存,然後重啟weblogic。
重新測試程式,問題得到解決!
本文出自 “麥田守望者” 部落格,請務必保留此出處http://4614839.blog.51cto.com/4604839/1670229
weblogic11_64下的java.lang.ClassCastException: java.sql.Timestamp cannot be cast to java.sql.Date