项目中使用hibernate时遇到一个错误:
org.hibernate.MappingException: No Dialect mapping for JDBC type: -4
debug时在程序执行栈里,发现是一个Blob类型的字段在根据typeCode获取类型时出错。从网上搜到一篇文章:
http://blog.sina.com.cn/s/blog_4f925fc30102eafj.html。
原来原因是在OO映射时,Blob类型无法映射到相应的Java类型,解决方案可以扩展MysqlDialect,在扩展的方言中指定java类型到mysql数据库中的Blob字段类型的映射关系即可。如下:
1
2
3
4
5
6
7
8
9
10
|
import
java.sql.Types;
import
org.hibernate.Hibernate;
import
org.hibernate.dialect.MySQLDialect;
public
class
BlobMySQLDialectextends MySQLDialect {
public
BlobMySQLDialect() {
super
();
registerHibernateType(Types.LONGVARBINARY,Hibernate.BLOB.getName());
}
}
|
然后在配置hibernat属性的配置文件中使用扩展后的Dialect。如下:
1
2
3
4
5
6
7
|
<
property
name
=
"hibernateProperties"
>
<
props
>
<
prop
key
=
"hibernate.dialect"
>
com.shihuan.core.framework.extend.BlobMySQLDialect
</
prop
>
</
props
>
</
property
>
|