关于hibernate中createQuery执行hql报错的小结

1,2其实虽然可以运行,但是仍有隐含的错误,不容易发现。

1。实体类和数据库的表不能映射在一起。

报错的代码:

org.hibernate.hql.ast.QuerySyntaxException: news is not mapped [select id, type,title ,author,message,date from news where type = 1 order by date desc]
	org.hibernate.hql.ast.util.SessionFactoryHelper.requireClassPersister(SessionFactoryHelper.java:180)
	org.hibernate.hql.ast.tree.FromElementFactory.addFromElement(FromElementFactory.java:111)
	org.hibernate.hql.ast.tree.FromClause.addFromElement(FromClause.java:93)
	org.hibernate.hql.ast.HqlSqlWalker.createFromElement(HqlSqlWalker.java:327)
	org.hibernate.hql.antlr.HqlSqlBaseWalker.fromElement(HqlSqlBaseWalker.java:3441)
解决方法:修改sql语句
select id, type,title ,author,message,date from News where type = 1 order by date desc
数据库名和实体名,千万要注意。

2.将1中的hql语句修改之后。别以为万事大吉。其实暗藏一个问题。就是使用Interator 遍历是会出现类似这样的错误。如果不遍历只求大小的话,还好,可以正常得出结果,但是一旦遍历,始终得不出结果。仔细查看问题就出在这个hql语句上。

java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to com.xzsz.model.News
	com.xzsz.dao.impl.NewsDaoImpl.getNews(NewsDaoImpl.java:37)
	com.xzsz.service.impl.NewsServiceImpl.getNews(NewsServiceImpl.java:24)
	sun.reflect.GeneratedMethodAccessor42.invoke(Unknown Source)
	sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	java.lang.reflect.Method.invoke(Method.java:597)

解决方法,将hql语句修改为:from News where type = 1 order by date desc


另外:可以限制查询条数(10条)

       Query q = this.getSession().createQuery(hql);
        //限制条数
        q.setFirstResult(0);
        q.setMaxResults(10);
        return q.list();


-------------------------------

end.






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值