錯誤原因:使用的是Hibernate映射的數據庫方言,數據庫字段是NVARCHAR2(),NVARCHAR2()類型映射不到Java數據類型
Oracle10gDialect中沒有註冊NVARCHAR和NCLOB數據類型
一、重寫方言類 ,重新定義Oracle字段與Java類型的映射
package com.modules.sys.utils;
import java.sql.Types;
import org.hibernate.dialect.Oracle10gDialect;
import org.hibernate.type.StandardBasicTypes;
public class MyOracleDialect extends Oracle10gDialect
{
public MyOracleDialect(){
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());
}
}
二、修改Hibernate配置文件 dialect指向自定義的方言類
<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="packagesToScan" value="com.greatmap"/>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">com.modules.sys.utils.MyOracleDialect</prop>
<prop key="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</prop>
<prop key="net.sf.ehcache.configurationResourceName">${hibernate.ehcache.configFile}</prop>
<prop key="hibernate.cache.use_second_level_cache">false</prop>
<prop key="hibernate.cache.use_query_cache">false</prop>
<prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
<prop key="hibernate.format_sql">${hibernate.format_sql}</prop>
<prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop>
</props>
</property>
</bean>