http://www.w2tt.cn/redirect.php?tid=86&goto=lastpost
在开发项目中,遇到了hibernate 的2个bug。导致出现了一些麻烦。
1、hibernate中native sql对于DB的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 类 registerVarcharTypes 方法,增加一行
registerHibernateType( -1, Hibernate.STRING.getName());
2、HQL中使用inner join fetch之后会导致分页函数失效。
原来是用Query.setFirstResult().setMaxResult()实现分页的。
由于使用了inner join fetch,导致数据一下全部取出。10万多条数据啊,网站一下变得很慢。
最后只好采用sql。
http://opensource.atlassian.com/projects/hibernate/browse/HHH-2877
workaround: map the columns explicit with addScalar.
官方论坛解决方案:
http://opensource.atlassian.com/projects/hibernate/browse/HHH-1483