org.hibernate.MappingException: No Dialect mapping

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值