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