Hibernate不支持ORACLE的rowid查詢 (No Dialect mapping for JDBC type: -8)

今天遇到一個很奇怪的問題,執行sql報異常,先貼一下我的sql文:

SELECT
        A.UNIT_PTN_ID ,
        A.DKMK_ID,
        A.UPDATE_DATE,
        A.UPDATE_BY,
        A.ROWID AS ROWID1,
        B.DKMK_CD ,
        C.BUI_NAI_KOSEI_JUNI  
    FROM
        GTS_UNIT_PTN_KOSEI A 
    LEFT JOIN
        GTS_DKMK B 
            ON A.DKMK_ID = B.DKMK_ID 
    LEFT JOIN
        GTS_DKMK C 
            ON C.DKMK_ID=A.DKMK_ID  
    WHERE
        A.UNIT_PTN_ID =? 
    ORDER BY
        C.BUI_NAI_KOSEI_JUNI,
        A.DKMK_ID
    開始還以爲是我sql寫的有問題,用hibernate輸出的sql文 在OB11 中執行沒有任何問題,但是在程序中一執行就報錯,**No Dialect mapping for JDBC type: -8**   就報這個異常,原來在我引用的數據庫方言中又不支持的關鍵字 ROWID,我用的是oracle10的數據庫方言。rowId在這個數據庫方言中的類型不識別,解決思路重寫一下Dialect,在構造函數中將 -8這個rowid對應的列類型進行註冊。rowid對應的類型值是-8。
    columntype = -8 columnname = ROWID
    首先新建一個類MysqlDialect:
這個類必須繼承你之前用的數據庫方言的類,我之前用的是Oracle10gDialect,然後註冊rowid的列類型。
public class MysqlDialect extends Oracle10gDialect {
    public MysqlDialect() {
        super();
        super.registerColumnType(-8, "string");
        super.registerHibernateType(-8, "string");
    }
}

然後在配置數據庫方言的 Hibernate.cfg.xml文件中重新引用剛纔新建的數據庫方言類即可。

<!-- <property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect"/> -->

        <property name="hibernate.dialect" value="nissan.asf.gates.interceptor.MysqlDialect"/>

註釋掉的是之前引用的oracle10的數據庫方言,現在用的就是剛剛自己做的一個Dialect類
重啓服務,運行,OK 哈哈,神奇的好了!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章