在开发项目中,遇到了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());
}
}