当在hibernate中运用原始的sql语句进行操作的的时候,常常会报错,错误很多都是关于
No Dialect mapping for JDBC type 类型的错误,经过分析和查找,问题常常发生在几个地方
1、错误的配置了hibernate的方言
No Dialect mapping for JDBC type 类型的错误,经过分析和查找,问题常常发生在几个地方
1、错误的配置了hibernate的方言
2、就是你的数据库中的字段和java里面的类型不匹配的问题
查找原因:通过查询hibernate的源码,找到问题的根本所在,就是hibernate中不支持对应的数据类型,具体数据类型的值,请查看下表
查看 java.sql.Types 类,可以找到对应类型,调整相应的数据库里的类型,或者其他支持这个类型的方言。

java,hibernate和数据库对应的数据类型
| Java数据类型 | Hibernate数据类型 | 标准SQL数据类型 (PS:对于不同的DB可能有所差异) |
| byte、java.lang.Byte | byte | TINYINT |
| short、java.lang.Short | short | SMALLINT |
| int、java.lang.Integer | integer | INGEGER |
| long、java.lang.Long | long | BIGINT |
| float、java.lang.Float | float | FLOAT |
| double、java.lang.Double | double | DOUBLE |
| java.math.BigDecimal | big_decimal | NUMERIC |
| char、java.lang.Character | character | CHAR(1) |
| boolean、java.lang.Boolean | boolean | BIT |
| java.lang.String | string | VARCHAR |
| boolean、java.lang.Boolean | yes_no | CHAR(1)('Y'或'N') |
| boolean、java.lang.Boolean | true_false | CHAR(1)('Y'或'N') |
| java.util.Date、java.sql.Date | date | DATE |
| java.util.Date、java.sql.Time | time | TIME |
| java.util.Date、java.sql.Timestamp | timestamp | TIMESTAMP |
| java.util.Calendar | calendar | TIMESTAMP |
| java.util.Calendar | calendar_date | DATE |
| byte[] | binary | VARBINARY、BLOB |
| java.lang.String | text | CLOB |
| java.io.Serializable | serializable | VARBINARY、BLOB |
| java.sql.Clob | clob | CLOB |
| java.sql.Blob | blob | BLOB |
| java.lang.Class | class | VARCHAR |
| java.util.Locale | locale | VARCHAR |
| java.util.TimeZone | timezone | VARCHAR |
| java.util.Currency | currency | VARCHAR |
解决办法:
(1)写个类继承SQLServerDialect,注册类型映射
package com.xuedou.skyedu.util;
import java.sql.Types;
import org.hibernate.Hibernate;
import org.hibernate.dialect.SQLServerDialect;
/**
* 注册nvarchar类型映射
*/
public class SkySQLServerDialect extends SQLServerDialect{
public SkySQLServerDialect() {
super(); //调用父类的构造方法(super()一定要放在方法的首个语句)
registerHibernateType(Types.NVARCHAR, Hibernate.STRING.getName());
}
}
(2)配置hibernate文件,修改为
hibernate.dialect=com.xuedou.skyedu.util.SkySQLServerDialect
参考文档:http://blog.youkuaiyun.com/xd195666916/article/details/5419316
本文详细解析了在使用Hibernate时遇到的关于NoDialectmappingforJDBCtype错误的原因,并提供了针对性的解决方法,包括配置方言、调整数据库字段类型等。
657

被折叠的 条评论
为什么被折叠?



