1. 程式人生 > >ORACLE11g:No Dialect mapping for JDBC type: -9

ORACLE11g:No Dialect mapping for JDBC type: -9

用Hibernate原生sql查詢資料,sql中含有unistr() 函式,報錯:ORACLE11g:No Dialect mapping for JDBC type: -9;

第一步   :   寫一個自定義的方言類,該類繼承原來的oracle10gDialect,並註冊缺少的型別和方法;

package phis.source.dialect;

import java.sql.Types;

import org.hibernate.dialect.Oracle10gDialect;
import org.hibernate.dialect.function.SQLFunctionTemplate;
import org.hibernate.type.StandardBasicTypes;

public class MyOracle10gDialect extends Oracle10gDialect {

	public MyOracle10gDialect() {
		super();
		registerHibernateType(Types.CHAR, StandardBasicTypes.STRING.getName());
		registerHibernateType(Types.NVARCHAR, StandardBasicTypes.STRING.getName());      
		registerHibernateType(Types.LONGNVARCHAR, StandardBasicTypes.STRING.getName());
		registerHibernateType(Types.DECIMAL, StandardBasicTypes.DOUBLE.getName());		
		registerHibernateType(Types.NCLOB, StandardBasicTypes.STRING.getName());
		registerFunction( "date", new SQLFunctionTemplate(StandardBasicTypes.DATE, "to_date(?1,'yyyy-MM-dd')") );
		registerFunction( "sum_day", new SQLFunctionTemplate(StandardBasicTypes.DATE, "?1") );
		registerFunction( "sum_day2", new SQLFunctionTemplate(StandardBasicTypes.DATE, "?1+?2"));
		registerFunction( "sum_month", new SQLFunctionTemplate(StandardBasicTypes.DATE, "add_months(?1,?2)") );
	}
}

 更改hibernate資料庫配置檔案,將資料庫方言改為剛才自定義的方言類  <prop key="hibernate.dialect">phis.source.dialect.MyOracleDialect</prop>
1 ARRAY 2003
2 BIGINT -5
3 BINARY -2
4 BIT -7
5 BLOB 2004
6 BOOLEAN 16
7 CHAR 1
8 CLOB 2005
9 DATALINK 70
10 DATE 91
11 DECIMAL 3
12 DISTINCT 2001
13 DOUBLE 8
14 FLOAT 6
15 INTEGER 4
16 JAVA_OBJECT 2000
17 LONGNVARCHAR -16
18 LONGVARBINARY -4
19 LONGVARCHAR -1
20 NCHAR -15
21 NCLOB 2011
22 NULL 0
23 NUMERIC 2
24 NVARCHAR -9
25 OTHER 1111
26 REAL 7
27 REF 2006
28 ROWID -8
29 SMALLINT 5
30 SQLXML 2009
31 STRUCT 2002
32 TIME 92
33 TIMESTAMP 93
34 TINYINT -6
35 VARBINARY -3
36 VARCHAR