hibernate:unexpected AST node: = (hql语句错误)

来源:百度知道 编辑:UC知道 时间:2024/06/28 03:24:14
String hql = "from NewsVO as n where n.cate="+ Integer.parseInt(id) + " order by n.top=false, n.id desc";(报错)

ERROR - <AST>:1:58: unexpected AST node: =
org.hibernate.hql.ast.QuerySyntaxException: unexpected AST node: = near line 1, column 58 [from order.vo.NewsVO as n where n.cate=10 order by n.top=false, n.id desc]

简单的来说就是hql在order by后面加入n.top=false就报错!但是加到判断where里面就不报错,这么就证明hibernate识别这样的语句,而放在order by后面可能是语法问题!另外如果直接n.top不加判断,这条hql也是可用的,举例:

String hql = "from NewsVO as n where n.cate="+ Integer.parseInt(id) + " order by n.top, n.id desc";(正常)

String hql = "from NewsVO as n where n.top=false or n.cate="+ Integer.parseInt(id) + " order by n.id desc";(正常)

但是我现在需要用top=false和id同时进行来做排序

我的数据库是mysql的,n.top对应字段tinyint类型,top本身是boolean型的
怎么会关系呢,当初我使用hibernate2的时候就没报错。
我要的效果是文章的列表置顶(top),当非置顶的情况下,按id排序.
当然,高手们,我知道这样的效果可以分两步走!但是我当初用hibernat

有一点没看明白。。。top=false 是个条件判断,跟排序有什么关系 ??
即使作为 order by 的条件,top字段都是 false 就和 一组数据都是 1然后你要跟这组数据排序一样,有什么区别么?

你是不是要查询出 top=false 并且 n.cate=id 然后再根据n.id排序啊top字段作为排序条件不会起任何作用的

下面这句试试吧,看是不是你要的结果

String hql = "from NewsVO as n where n.top=false and n.cate="+ Integer.parseInt(id) + " order by n.id desc";

...晕到,order by 没有那样的语法吧 .order by后面只是跟字段,表示对这个字段进行排序.如果你想要条件就放where里面好了.这样当然会报错.

楼上的6级以上的'高手'啊,我服你们了,楼主都得看傻了。
String hql = "from NewsVO as n where n.top=false and n.cate="+ Integer.parseInt(id) + " order by n.id desc";
就行了,楼主,没错,就是or 替换成 and

倒,先去看SQL语法书,这跟Hibernate基本没关系。。
用高层工具,写低层代码,唉。