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.java:370)
    org.hibernate.loader.custom.CustomLoader$Metadata.getHibernateType(CustomLoader.java:559)
    org.hibernate.loader.custom.CustomLoader$ScalarResultColumnProcessor.performDiscovery(CustomLoader.java:485)
    org.hibernate.loader.custom.CustomLoader.autoDiscoverTypes(CustomLoader.java:501)
    org.hibernate.loader.Loader.getResultSet(Loader.java:1796)
    org.hibernate.loader.Loader.doQuery(Loader.java:674)

问题还原:

数据库为MySQL,读取表中一个Blog类型字段

String hql ="select ID,IMG from test";
Session session = getSession();
list = session.createSQLQuery(hql).list();


问题解决:

这是由于mysql(BLOB或text)在hibernate中没有注册该类型

重写MySQL方言,新建一个类

import java.sql.Types;
import org.hibernate.Hibernate;
import org.hibernate.dialect.MySQLDialect;

public class BlobMySQLDialect extends MySQLDialect{
	public BlobMySQLDialect () {
        super();
        registerHibernateType(Types.LONGVARBINARY, Hibernate.BLOB.getName());
    }
}

修改Hibernate配置文件

<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
修改为:
<property name="dialect">该类所在路径/BlobMySQLDialect</property>  

作者:itmyhome

时间: 2024-10-08 11:15:01

org.hibernate.MappingException: No Dialect mapping for JDBC type: -4的相关文章

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中对于数据库的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–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)

错误: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

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 数据库方言配置;no dialect mapping for jdbc type:-9;生僻字

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

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");

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,解决思

执行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(