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

mysql的text如何dialect mapping

在开发项目中,遇到了hibernate 的2个bug。导致出现了一些麻烦。
1、hibernate中对于数据库的Text数据类型不支持。
? ?hibernate 使用hql查询包含text类型字段的时候很好。如果使用native sql也就是使用??createSQLQuery方法查询text类型的时候总是报错:
org.hibernate.MappingException: No Dialect mapping for JDBC type:-1
? ?????atorg.hibernate.dialect.TypeNames.get(TypeNames.java :56)
是hibernate与mysql的jdbc驱动配合上出现了问题:对于 mysql text类型jdbc??ResultSetMetaData.getColumnType??返回-1??,而hibernate没有注册该类型,所以导致createSQLQuery 报 No Dialect mapping for JDBCtype: -1。

解决这个问题:要么使用hql,不使用sql,

要么继承?MySQL5Dialect??类重写方法??
import java.sql.Types;??
importorg.hibernate.Hibernate;??
import org.hibernate.dialect.MySQLInnoDBDialect;

public class MySqlDialectOverride extends MySQLInnoDBDialect{
?public MySqlDialectOverride(){??
???????super();??
???????registerHibernateType(Types.DECIMAL,Hibernate.BIG_DECIMAL.getName());??
???????registerHibernateType(-1,Hibernate.STRING.getName());??
???}?
}