一、描述
本项目使用JEECG开源框架开发,其中hibernate4.2.0,Oracle10g数据库,tomcat7.40,jdk7,ojdbc6.jar札包连接数据库,在tomcat7启动时报错如下图所示。
二、解决方案
由于hibernate4.2.0和Oracle10g数据库结合使用自定义方言时,需要和老版本做区别,原来的Oracle10gDialect中没有注册NVARCHAR和NCLOB数据类型,此二者的java.sql.Types对应的类型编码为-9和2011,其它的类型可以参考下面的表1,解决思路是缺少什么类型就在自定义的方言类中注册哪个类型,并且确定用StandardBasicTypes中的类型解析。
步骤1:写一个自定义个方言类,该类继承原来的Oracle10gDialect方言,并注册缺少的类型
package org.hibernate.myDialect;
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());
}
}
步骤2:更改hibernate数据库配置文件,将数据库方言改为刚才自定义的方言类
<prop key="hibernate.dialect">org.hibernate.myDialect.MyOracleDialect</prop>
三、各种数据类型编号对照表如下