org.springframework.orm.hibernate3.HibernateQueryException: unexpected token

tangyong1019 2012-07-27 09:42:08
本人新手,用的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,其他地方有问题,也请指教。如果可以,希望能给改正。十分感谢。
...全文
1357 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiao_anni 2014-10-11
  • 打赏
  • 举报
回复
怎么弄的??是hql错吗???
tangyong1019 2012-08-16
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

楼主问题解决了吗?
[/Quote]
解决了,你有问题?
Dunhor 2012-08-15
  • 打赏
  • 举报
回复
楼主问题解决了吗?
tangyong1019 2012-07-31
  • 打赏
  • 举报
回复
public int countTotalPage(int id,int size) throws Exception {
String sql = "select count(*) from(select student.*, row_number() over(order by id desc)row_number from student where id="+id+" or parent_id="+id+")";
int c = jdbcTemplate.queryForInt(sql);
// 根据总记录数c,计算总页数
if (c == 0) {
return 1;
} else if (c % size == 0) {
return c / size;
} else {
return c / size + 1;
}
}


用sql写就好了,方法还是多种多样的,用这方法简单点了。
liu4626846 2012-07-27
  • 打赏
  • 举报
回复
少年! 既然知知道hql出问题 不知道show_sql 吗、? 然后放到数据库运行不就得了

51,410

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧