標籤:and 分享 ict 思路 自訂 結果 欄位 standard 技術
問題來源: 煞筆領導不幹活
好不容易幹了個活
改了個欄位長度,從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.Oracle10gDialecthibernate.dialect=cc.dfsoft.uexpress.MyOracleDialect
各種資料類型編號對照表如下
ORACLE11g:No Dialect mapping for JDBC type: -9解決方案