日期:2014-05-16  浏览次数:20528 次

问题积累—关于 No Dialect mapping for JDBC type: 错误

参考了http://www.iteye.com/topic/580476的文章,解决问题。

?

在此记录一下:

?

我的SQLServer数据库中表的字段是nvarchar(1),升级到2008上也是nvarchar(1)出现了
?
运行的时候报错:No Dialect mapping for JDBC type:-9
?
解决方法如下:
1.首先自己写一个class,继承org.hibernate.dialect.SQLServerDialect
?
?
import java.sql.Types;   
  
import org.hibernate.Hibernate;   
import org.hibernate.dialect.SQLServerDialect;   
  
public class SqlServer2008Dialect extends SQLServerDialect {   
  
    public SqlServer2008Dialect() {   
        super();   
        registerHibernateType(Types.CHAR, Hibernate.STRING.getName());   
        registerHibernateType(Types.NVARCHAR, Hibernate.STRING.getName());   
        registerHibernateType(Types.LONGNVARCHAR, Hibernate.STRING.getName());   
        registerHibernateType(Types.DECIMAL, Hibernate.DOUBLE.getName());   
    }   
}  
??
?
2:修改配置文件application.xml:
?
<property name="hibernateProperties">
      <props>
              <prop key="hibernate.dialect">
               com.***.***.***.util.SqlServer2008Dialect
              </prop>
      </props>
</property>
?
注:其他的数据类型请参考下表
类型名称 显示长度 数据库类型 JAVA类型 JDBC类型(int) Types属性
VARCHAR L+N VARCHAR java.lang.String 12 Types.VARCHAR
CHAR N CHAR java.lang.String 1 Types.CHAR
BLOB L+N BLOB java.lang.byte[] -4 Types.LONGVARBINARY
TEXT 65535 VARCHAR java.lang.String -1 Types.LONGVARCHAR
INTEGER 4 INTEGER UNSIGNED java.lang.Long 4 Types.INTEGER
TINYINT 3 TINYINT UNSIGNED java.lang.Integer -6 Types.TINYINT
SMALLINT 5 SMALLINT UNSIGNED java.lang.Integer 5 Types.SMALLINT
MEDIUMINT 8 MEDIUMINT UNSIGNED java.lang.Integer 4 Types.INTEGER
BIT 1 BIT java.lang.Boolean -7 Types.BIT
BIGINT 20 BIGINT UNSIGNED java.math.BigInteger -5 Types.BIGINT
FLOAT 4+8 FLOAT java.lang.Float 7 Types.REAL
DOUBLE 22 DOUBLE java.lang.Double 8 Types.DOUBLE
DECIMAL 11 DECIMAL java.math.BigDecimal 3 Types.DECIMAL
BOOLEAN 1 同TINYINT java.lang.Integer -6 Types.TINYINT
DATE 10 DATE java.sql.Date 91 Types.DATE
TIME 8 TIME java.sql.Time 92 Types.TIME
DATETIME 19 DATE