ORACLE11g:No Dialect mapping for JDBC type: -9解决方案

问题来源:

煞笔领导不干活

好不容易干了个活

改了个字段长度,从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.Oracle10gDialect
hibernate.dialect=cc.dfsoft.uexpress.MyOracleDialect

各种数据类型编号对照表如下

原文地址:https://www.cnblogs.com/luxd/p/8316243.html

时间: 2024-07-29 17:35:53

ORACLE11g:No Dialect mapping for JDBC type: -9解决方案的相关文章

org.hibernate.MappingException: No Dialect mapping for JDBC type: -4

Stacktraces org.hibernate.MappingException: No Dialect mapping for JDBC type: -4 org.hibernate.dialect.TypeNames.get(TypeNames.java:56) org.hibernate.dialect.TypeNames.get(TypeNames.java:81) org.hibernate.dialect.Dialect.getHibernateTypeName(Dialect.

hibernate查询异常:No Dialect mapping for JDBC type:-9(sql server)

今天用到hibernate查询数据库数据(sql server),出现异常:No Dialect mapping for JDBC type:-9 但是把对应的sql语句拷贝到数据库UI工具运行发现没有错误,所以考虑是hibernate查询的问题. 最终通过上网查资料发现hibernate对于nvarchar的查询问题,一般在中文系统中应该使用nvarchar作为字符串的对应类型,但是Hibernate中的默认实现SQLServerDialect使用了varchar. 解决方法: 1.自定义个一

hibernate中对于数据库的Text注解出现 No Dialect mapping for JDBC type: -1解决方法

hibernate中对于数据库的Text数据类型不支持. hibernate 使用hql查询包含text类型字段的时候很好.如果使用native sql也就是使用  createSQLQuery方法查询text类型的时候总是报错: org.hibernate.MappingException: No Dialect mapping for JDBC type:-1 atorg.hibernate.dialect.TypeNames.get(TypeNames.java :56) 是hiberna

错误:No Dialect mapping for JDBC type: -9

org.springframework.orm.hibernate3.HibernateSystemException: No Dialect mapping for JDBC type: -9; nested exception is org.hibernate.MappingException: No Dialect mapping for JDBC type: -9    at org.springframework.orm.hibernate3.SessionFactoryUtils.c

No Dialect mapping for JDBC type–4 hibernate查询MySQL中longBlob数据

MySQL数据库中的类型为longBlob 实体类定义为:byte[] 类型 映射文件配置为:type="org.springframework.orm.hibernate3.support.BlobByteArrayType 异常信息: 1 org.hibernate.MappingException: No Dialect mapping for JDBC type: -4 2 at org.hibernate.dialect.TypeNames.get(TypeNames.java:56)

org.hibernate.MappingException: No Dialect mapping for JDBC type: -1 解决方法

错误代码: [c-sharp] view plaincopy org.hibernate.MappingException: No Dialect mapping for JDBC type: -1 at org.hibernate.dialect.TypeNames.get(TypeNames.java:79) at org.hibernate.dialect.TypeNames.get(TypeNames.java:104) at org.hibernate.dialect.Dialect.

Hibernate 数据库方言配置;no dialect mapping for jdbc type:-9;生僻字

最近因为生僻字在界面上显示为?: 主要原因是该字段在数据库中就是varchar类型,显示的就是?:如?(yan):现把varchar类型改为nvarchar类型:数据中能够正常显示: 但是SpringBoot程序jpa执行原生的存储过程的会报如下错误: 经验证,是因为Hibernate数据库方言配置问题:增加数据库方言配置 ,方言需要重写: package com.winning.thread; import org.hibernate.dialect.SQLServerDialect;impo

执行sql出现No Dialect mapping for JDBC type: -9错误

name的数据类型是nvarchar吗?如果是改为varchar类型应该能运行,但是这个治标不治本,这是hibernate没映射nvarchar 刚才整理了一下varchar和nvarchar的区别,然后用Hibernate映射到数据库时,发现String类型被映射为了varchar,就在网上找了一下怎样将String映射为nvarchar. 方法一: 对于String类型,你可能是这样映射的 [java] view plaincopy private String name; @Column(

No Dialect mapping for JDBC type: -9

由于项目中使用的是hibernate 4.35版本和sqlserver 2008数据库.所以,自定义方言时,需要和老版本做区别: public class MySQLServerDialect extends SQLServerDialect { public MySQLServerDialect() { super(); registerHibernateType(1, "string"); registerHibernateType(-9, "string");