No Dialect mapping for JDBC type: -1

hibernate中使用sql语句进行查询,后台报错
No Dialect mapping for JDBC type: -1; nested exception is org.hibernate.MappingException: No Dialect mapping for JDBC type: -1
查询了一下说是查询的数据中使用了hibernate不支持的数据类型,就是说hibernate没有注册该类型,查看java.sql.Types维护的一些常量根据报错的数据来查看是哪个类型出错,-1即LONGVARCHAR类型出错。

这里写图片描述

解决方法1

写一个Dialect的子类,这里因为我使用MySQL数据库所以 extends MySQL5Dialect类,

package com.aerors.config;

import java.sql.Types;

import org.hibernate.Hibernate;
import org.hibernate.dialect.MySQL5Dialect;   
public class DialectForInkfish extends MySQL5Dialect {   
    public DialectForInkfish() {   
        super(); 
        //JDBC type:1  
        registerHibernateType(Types.CHAR, Hibernate.STRING.getName());  

        //JDBC type:-9  
        registerHibernateType(Types.NVARCHAR, Hibernate.STRING.getName());  

        //JDBC type:-16  
        registerHibernateType(Types.LONGNVARCHAR, Hibernate.STRING.getName());  

        //JDBC type:3  
        registerHibernateType(Types.DECIMAL, Hibernate.DOUBLE.getName());  

        //JDBC type:-1  
        registerHibernateType(Types.LONGVARCHAR, Hibernate.STRING.getName()); 
    }   
} 

修改Hibernate配置文件hibernate.cfg.xml,把

<property name="dialect">org.hibernate.dialect.MySQL5Dialect</property>   

修改为:

<property name="dialect">com.aerors.config.DialectForInkfish</property>  

JDBC type为1,-9,-16,3等其他值时,也可以添加对其错误码对应的的数据类型的支持。

解决方法二

抛弃sql语句查询,改为HQL语句查询

解决方法三

使用CONVERT函数,将text转成varchar,简单方便

CONVERT(varchar(100), isnull(dateTime, '')) 

dateTime是text类型变量名,isnull函数判断下是否为空,一般在时间类型(datetime,smalldatetime)与字符串类型(nchar,nvarchar,char,varchar)
相互转换的时候才用到。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值