(动态改变数据源遇到的问题)ORACLE11g:No Dialect mapping for JDBC type: -9解决方案
在动态改变数据源时 hibernate配置不能使用Oracle官方的方言(org.hibernate.dialect.Oracle10gDialect)
做法写一个方言扩展类,缺什么类型,添加什么类型的支持,并在配置文件中使用自定义的方言扩展类
此次报错:由于hibernate4.2.0和Oracle10g数据库结合使用自定义方言时,需要和老版本做区别,原来的Oracle10gDialect中没有注册NVARCHAR和NCLOB数据类型,
此二者的java.sql.Types对应的类型编码为-9和2011,其它的类型可以参考下面的表1,解决思路是缺少什么类型就在自定义的方言类中注册哪个类型,并且确定用StandardBasicTypes中的类型解析。
例子:步骤1、
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=cc.dfsoft.uexpress.MyOracleDialect
各种数据类型编号对照表如下