org.springframework.orm.hibernate3.HibernateQueryException: unexpected token
本人新手,用的ssh框架,求教育
junit测试通过后报错,错误信息如下
org.springframework.orm.hibernate3.HibernateQueryException: unexpected token: ( near line 1, column 5 [from(select student.*, row_number() over(order by id desc)row_number from student where id='341' or parent_id='341')]; nested exception is org.hibernate.hql.ast.QuerySyntaxException: unexpected token: ( near line 1, column 5 [from(select student.*, row_number() over(order by id desc)row_number from student where id='341' or parent_id='341')]
at org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:642)
at org.springframework.orm.hibernate3.HibernateAccessor.convertHibernateAccessException(HibernateAccessor.java:412)
at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:424)
at org.springframework.orm.hibernate3.HibernateTemplate.executeWithNativeSession(HibernateTemplate.java:374)
at org.springframework.orm.hibernate3.HibernateTemplate.find(HibernateTemplate.java:917)
at org.springframework.orm.hibernate3.HibernateTemplate.find(HibernateTemplate.java:909)
at com.fyt.ssh.dao.impl.StudentDaoImpl.countTotalPage(StudentDaoImpl.java:186)
at com.fyt.ssh.test.TestStudentDao.testCountTotalPage(TestStudentDao.java:99)
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:585)
at junit.framework.TestCase.runTest(TestCase.java:168)
at junit.framework.TestCase.runBare(TestCase.java:134)
at junit.framework.TestResult$1.protect(TestResult.java:110)
at junit.framework.TestResult.runProtected(TestResult.java:128)
at junit.framework.TestResult.run(TestResult.java:113)
at junit.framework.TestCase.run(TestCase.java:124)
at junit.framework.TestSuite.runTest(TestSuite.java:232)
at junit.framework.TestSuite.run(TestSuite.java:227)
at org.junit.internal.runners.OldTestClassRunner.run(OldTestClassRunner.java:76)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:38)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
Caused by: org.hibernate.hql.ast.QuerySyntaxException: unexpected token: ( near line 1, column 5 [from(select student.*, row_number() over(order by id desc)row_number from student where id='341' or parent_id='341')]
at org.hibernate.hql.ast.QuerySyntaxException.convert(QuerySyntaxException.java:31)
at org.hibernate.hql.ast.QuerySyntaxException.convert(QuerySyntaxException.java:24)
at org.hibernate.hql.ast.ErrorCounter.throwQueryException(ErrorCounter.java:59)
at org.hibernate.hql.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:258)
at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:157)
at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:111)
at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:77)
at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:56)
at org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:72)
at org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:133)
at org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:112)
at org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1627)
at org.springframework.orm.hibernate3.HibernateTemplate$30.doInHibernate(HibernateTemplate.java:919)
at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:419)
... 24 more
方法:
/** 查询编号id用户下的用户总页数 ,size为每页信息条数*/
public int countTotalPage(int id,int size) throws Exception {
String hql = "from(select student.*, row_number() " +
"over(order by id desc)row_number " +
"from student where id='"+id+"' or parent_id='"+id+"')";
List list = this.getHibernateTemplate().find(hql);
int c = 0;
if(list.size()>0){
c = Integer.parseInt((String) list.get(0));
}
// 根据总记录数c,计算总页数
if (c == 0) {
return 1;
} else if (c % size == 0) {
return c / size;
} else {
return c / size + 1;
}
}
测试方法:
public void testCountTotalPage(){
StudentDao dao = (StudentDao)bean.getBean("studentDao");
try {
int c = dao.countTotalPage(341, 2);
System.out.println(c);
} catch (Exception e) {
e.printStackTrace();
}
}
貌似是hql出问题了,但是初用SSH,不知改如何将id,size放入hql,其他地方有问题,也请指教。如果可以,希望能给改正。十分感谢。