今天将开发完毕的项目发布到服务器上有,出现如下错误:
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,后面的配置为其他配置,与本文章所要解决的问题无关。