ORACLE11g:No Dialect mapping for JDBC type: -9解決方案


問題來源:

某個zhizhang同事不干活


好不容易干了個活


改了個字段長度,從varchar2(50) 改成了nvarchar(100)


結果因為方言問題,程序起不來了


字段類型也改不回來了


nnd
 
 

報錯如下:

 

解決方案

    由於hibernate4.2.0和Oracle10g數據庫結合使用自定義方言時,需要和老版本做區別,原來的Oracle10gDialect中沒有注冊NVARCHAR和NCLOB數據類型,

此二者的java.sql.Types對應的類型編碼為-9和2011,其它的類型可以參考下面的表1,解決思路是缺少什么類型就在自定義的方言類中注冊哪個類型,並且確定用StandardBasicTypes中的類型解析。

步驟1:

寫一個自定義方言類,該類繼承原來的Oracle10gDialect方言,並注冊缺少的類型

 

package cc.dfsoft.uexpress;

import java.sql.Types;


import org.hibernate.dialect.Oracle10gDialect;
import org.hibernate.type.StandardBasicTypes;
/**
 * Created by luxd on 2018/1/19.
 * 繼承oracle方言類 , 重新定義oracle字段類型映射到java的類型
 */
public class MyOracleDialect  extends Oracle10gDialect{
    public MyOracleDialect() {
        super();
        registerHibernateType(Types.NVARCHAR, StandardBasicTypes.STRING.getName());


    }
}

步驟2:

更改hibernate數據庫配置文件,將數據庫方言改為剛才自定義的方言類

#hibernate.dialect=org.hibernate.dialect.Oracle10gDialect
hibernate.dialect=cc.dfsoft.uexpress.MyOracleDialect

各種數據類型編號對照表如下

 

 

 

 
 
 
 
 
 
 
 
 
 
 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM