解决org.hibernate.MappingException: No Dialect mapping for JDBC type: -1(或=x)问题

出错原理:mysql等数据库都有自己的“方言”,如text类型的字段,而java数据类型中并没有此类型,于是在利用hibernate查找数据时会造成如是问题;

解决方案:

第一步:在项目有中合适位置写一个类(位置和类名随意,好辨认就行)

第二部:修改hibernate的配置文件中引入方言配置,将地址设置成自己编写的文件位置(切记层与层之间是“.”分割,不是斜杠)

注:我解决的只是text等部分问题,详细和其他问题也是自己在百度上搜的。具有其他怎么设置,自己查吧。
import java.sql.Types;  

第一步:
import org.hibernate.Hibernate;
import org.hibernate.dialect.MySQL5Dialect;
/**
 * ClassName: DialectForInkfish
 * @Description: 解决数据库部分方言问题
 * @author lixingshuai
 * @date 2016-8-19
 */
 public class DialectForInkfish extends MySQL5Dialect {  
     public DialectForInkfish() {  
         super();  
         registerHibernateType(Types.LONGVARCHAR, 65535, "text");
         registerHibernateType(Types.DECIMAL,Hibernate.BIG_DECIMAL.getName());   
         registerHibernateType(-1, Hibernate.STRING.getName());
     }  
 } 
package com.kuaiyun.entry;

import java.sql.Types;  

import org.hibernate.Hibernate;
import org.hibernate.dialect.MySQL5Dialect;
/**
 * ClassName: DialectForInkfish
 * @Description: TODO
 * @author lixingshuai
 * @date 2016-8-19
 */
 public class DialectForInkfish extends MySQL5Dialect {  
     public DialectForInkfish() {  
         super();  
         registerHibernateType(Types.LONGVARCHAR, 65535, "text");
         registerHibernateType(Types.DECIMAL,Hibernate.BIG_DECIMAL.getName());   
         registerHibernateType(-1, Hibernate.STRING.getName());
     }  
 } 


第二步:配置文件,将hibernate的方言问题文件引入.

<prop key="hibernate.dialect">com.kuaiyun.entry.DialectForInkfish</prop>


以下为看网友大神的一些总结:

解决方法为:通过查询hibernate的源码,找到问题的根本所在,就是hibernate中不支持对应的数据类型,具体数据类型的值,请查看下表
查看 java.sql.Types 类,可以找到对应类型,调整相应的数据库里的类型,或者其他支持这个类型的方言。
public final static int BIT   =  -7;
public final static int TINYINT  =  -6;
public final static int SMALLINT =   5;
public final static int INTEGER  =   4;
public final static int BIGINT   =  -5;
public final static int FLOAT   =   6;
public final static int REAL   =   7;
public final static int DOUBLE   =   8;
public final static int NUMERIC  =   2;
public final static int DECIMAL  =   3;
public final static int CHAR  =   1;
public final static int VARCHAR  =  12;
public final static int LONGVARCHAR  =  -1;
public final static int DATE   =  91;
public final static int TIME   =  92;
public final static int TIMESTAMP  =  93;
public final static int BINARY  =  -2;
public final static int VARBINARY  =  -3;
public final static int LONGVARBINARY  =  -4;
public final static int NULL  =   0;
public final static int OTHER  = 1111;
public final static int JAVA_OBJECT         = 2000;
public final static int DISTINCT            = 2001;
public final static int STRUCT              = 2002;
public final static int ARRAY               = 2003;
public final static int BLOB                = 2004;
public final static int CLOB                = 2005;
public final static int REF                 = 2006;
public final static int DATALINK = 70;
public final static int BOOLEAN = 16;
public final static int ROWID = -8;
public static final int NCHAR = -15;
public static final int NVARCHAR = -9;
public static final int LONGNVARCHAR = -16;
public static final int NCLOB = 2011;
public static final int SQLXML = 2009;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值