出错原理: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;