今天将开发完毕的项目发布到服务器上有,出现如下错误:

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

后经过分析,是因为服务器上的mysql版本较低(为5.1.66),本地开发版本为5.5的则没有这个问题,下面直接贴出解决方法:

1、增加Java类

import java.sql.Types;

import org.hibernate.Hibernate;
import org.hibernate.dialect.MySQL5InnoDBDialect;

public class MySQL5InnoDBDialectEx extends MySQL5InnoDBDialect {

public MySQL5InnoDBDialectEx() {
super();
registerHibernateType(Types.LONGVARCHAR, 65535, "text");
registerHibernateType(Types.DECIMAL, Hibernate.BIG_DECIMAL.getName());
registerHibernateType(-1, Hibernate.STRING.getName());
registerHibernateType(Types.LONGVARBINARY, Hibernate.BLOB.getName());//这一行解决No Dialect mapping for JDBC type: -4问题
}

}

注:前面3行是也是解决数据类型问题的,第四条是解决我们今天所说的 No Dialect mapping for JDBC type: -4 问题。


2、修改hibernate配置文件

<property name="hibernateProperties">
<value>
hibernate.dialect=com.dialect.MySQL5InnoDBDialectEx
hibernate.show_sql=false
hibernate.format_sql=true
hibernate.query.substitutions=true 1, false 0
hibernate.jdbc.batch_size=20
hibernate.generate_statistics=true
hibernate.cache.provider_class=org.hibernate.cache.EhCacheProvider
hibernate.cache.provider_configuration_file_resource_path=/ehcache.xml
hibernate.query.factory_class=org.hibernate.hql.ast.ASTQueryTranslatorFactory
hibernate.connection.autocommit=false
</value>
</property>

注:第一行引用我们自定义扩展的Java类MySQL5InnoDBDialectEx,后面的配置为其他配置,与本文章所要解决的问题无关。