hibernate中用oracle分页 想写成如下写法,但是报错,不知道怎么写Query query = session.createQuery("select * from (select * from VstsTrade where rownum<=3) VstsTrade where rownum>=1");
错误信息org.hibernate.hql.ast.QuerySyntaxException: unexpected token: * near line 1, column 8 [select * from (select * from com.vsts.model.pojo.VstsTrade where rownum<=3) VstsTrade where rownum>=1]
at org.hibernate.hql.ast.QuerySyntaxException.convert(QuerySyntaxException.java:54)
at org.hibernate.hql.ast.QuerySyntaxException.convert(QuerySyntaxException.java:47)
at org.hibernate.hql.ast.ErrorCounter.throwQueryException(ErrorCounter.java:82)
at org.hibernate.hql.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:284)
at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:182)
at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:136)
at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:101)
at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:80)
at org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:94)
at org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:156)
at org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:135)
at org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1651)
at com.vsts.model.daoImpl.VstsTradeDAOImpl.findAll(VstsTradeDAOImpl.java:102)
at com.vsts.model.daoImpl.TestTradeDaoImpl.testFindAllPage(TestTradeDaoImpl.java:49)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:73)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:46)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:180)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:41)
at org.junit.runners.ParentRunner$1.evaluate(ParentRunner.java:173)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
at org.junit.runners.ParentRunner.run(ParentRunner.java:220)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:46)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)

解决方案 »

  1.   

    createSQLQuery是用sql查询,createQuery是用hql查询
      

  2.   

    createSQLQuery是用sql查询,createQuery是用hql查询
    的用createSQLQuery原生sql查询
      

  3.   

    hql: from VstsTrade v where v.rownum<=3
      

  4.   


    是的,将createQuery()改成createSQLQuery试试。应该没问题了
      

  5.   

    其实hibernate默认就有分页查询的功能
      

  6.   

    creatSQLQuery()里面放的是sql语句
    createQuery()里面放的是hql语句
    hql语句跟sql是有区别的,hql是根据对象查,可以使用对象

    你这里好像使用的是sql,
    同时分页我也不建议这样去分,
    hibernate有更好的办法了

    List list=session.createQuery("from VstsTrade").setFirstResult(pageNo*pageSize-pageSize).setMaxResults(pageSize).list();
    pageNo表示当前也
    pageSize表示每页显示几条数据
      

  7.   

    select * from (select t.*,rownum tt from (select * from sup_doc_feedback order by web_doc_id)t where rownum <41) r where r.tt>20    查询排序后20-40数据
      

  8.   

    select vsts2  from (select vsts from VstsTrade vsts where rownum<=3) VstsTrade2 vsts2 where rownum>=1
    这样就可以了。也是HQL