[ 求助 ]unexpected token错误,org.hibernate.hql.internal.ast.ErrorCounter.reportError

wenfeng622 2016-07-18 09:08:19
这是该方法,查询的思路是 获得符合条件(业务ASS.SERVICE_ID,店名S.NAME,S.MERGER_ID所在省,市,区id,S.ENABLED = 1店铺没有被删除,for循环的那一部分Criteria是city)的店铺有多少个
public int countMerchantByCriteriaOrderByFollowHavingPC(Integer userId,String shopName, String mergerId,String choice,Criteria... criterias){
StringBuilder jpql = new StringBuilder();
jpql.append(" SELECT COUNT(N) FROM ( ");
jpql.append(" SELECT S.ID,S.NAME,S.IMG_URL,S.ADDRESS ");
jpql.append(" FROM ATS_SHOP S ");
jpql.append(" RIGHT JOIN ATS_SHOP_SERVICE ASS ON S.ID = ASS.SHOP_ID ");
jpql.append(" WHERE 1 = 1 ");

if(StringUtils.isNotEmpty(shopName)) {
jpql.append(" AND S.NAME like :shopName ");
}
if(StringUtils.isNotEmpty(choice)&&choice.equals("5")){
jpql.append(" AND ASS.SERVICE_ID = 5 ");
}
if(StringUtils.isNotEmpty(choice)&&choice.equals("3")){
jpql.append(" AND ASS.SERVICE_ID = 3 ");
}
if(StringUtils.isNotEmpty(choice)&&choice.equals("2")){
jpql.append(" AND ASS.SERVICE_ID = 2 ");
}
if(StringUtils.isNotEmpty(choice)&&choice.equals("1")){
jpql.append(" AND ASS.SERVICE_ID = 1 ");
}
if(StringUtils.isNotEmpty(choice)&&choice.equals("4")){
jpql.append(" AND ASS.SERVICE_ID = 4 ");
}

if(StringUtils.isNotEmpty(mergerId)){
jpql.append(" AND S.MERGER_ID = :mergerId ");
}
for(final Criteria criteria : criterias){
if(null!=criteria.getValue()){
jpql.append(" AND ").append(criteria.getFiledName()).append(" ");
jpql.append(criteria.getOperation()).append(" :");
if(null==criteria.getAliasName()){
jpql.append(criteria.getFiledName());
}else{
jpql.append(criteria.getAliasName());
}
}
}
//start modify sunxin 20160319 添加已删除的店铺不被查到
jpql.append(" AND S.ENABLED = 1 ");
//end modify
jpql.append(" GROUP BY S.ID ");
jpql.append(" ) N ");


TypedQuery<Long> query = em.createQuery(jpql.toString(), Long.class);

if(StringUtils.isNotEmpty(shopName)) {
query.setParameter("shopName", "%" + shopName + "%");
}
if(StringUtils.isNotEmpty(mergerId)){
query.setParameter("mergerId",mergerId);
}
for(final Criteria criteria : criterias){
if(null!=criteria.getValue()) {
if (null == criteria.getAliasName()) {
query.setParameter(criteria.getFiledName(), criteria.getValue());
} else {
query.setParameter(criteria.getAliasName(), criteria.getValue());
}
}
}
return query.getSingleResult().intValue();
}

-----------------该语句用mysql直接查----------------------

是可以正常查出来的,但是一运行就会报错,如下。


求指出错误TAT
...全文
617 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Dynasty乄 2017-11-21
  • 打赏
  • 举报
回复
老哥, 如果你的hibernate 版本可以使用子查询的话 , 那么就是你掉了一个 子查询的反括号 ) 了
weixin_38474284 2017-11-08
  • 打赏
  • 举报
回复
在 where 后面加一个 空格 试试 , 我的是这样解决的
疯狂的小鱼 2016-10-18
  • 打赏
  • 举报
回复
同错,楼主解决了吗?
wenfeng622 2016-07-21
  • 打赏
  • 举报
回复
引用 5 楼 u010087908 的回复:
from 后面不能接子查询.
... from DomesticCat as cat
where cat.name in (
    select name.nickName from Name as name
)
给表起别名了。N
NANU-NANA 2016-07-20
  • 打赏
  • 举报
回复
from 后面不能接子查询.
... from DomesticCat as cat
where cat.name in (
    select name.nickName from Name as name
)
wenfeng622 2016-07-20
  • 打赏
  • 举报
回复
引用 3 楼 u010087908 的回复:
[quote=引用 2 楼 wenfeng622 的回复:] [quote=引用 1 楼 u010087908 的回复:] 你构造的sql语句有错误
那,是哪里写错。。[/quote] 你把最终的sql语句输出,对比一下不就知道了么。[/quote] SELECT COUNT(N) FROM ( SELECT S.ID,S.NAME,S.IMG_URL,S.ADDRESS FROM ATS_SHOP S RIGHT JOIN ATS_SHOP_SERVICE ASS ON S.ID = ASS.SHOP_ID WHERE 1 = 1 AND S.MERGER_ID = :mergerId AND S.CITY = :city AND S.ENABLED = 1 GROUP BY S.ID ) as N 这个是执行的,和晒的数据库里的语句是一样的。 可就是出错 ---------------------------------------- [2016-07-20 19:35:58 ERROR] [org.hibernate.hql.internal.ast.ErrorCounter.reportError(ErrorCounter.java:78)] - line 1:23: unexpected token: ( [2016-07-20 19:35:58 ERROR] [org.hibernate.hql.internal.ast.ErrorCounter.reportError(ErrorCounter.java:78)] - line 1:23: unexpected token: ( [2016-07-20 19:35:58 ERROR] [org.hibernate.hql.internal.ast.ErrorCounter.reportError(ErrorCounter.java:73)] - line 1:23: unexpected token: ( line 1:23: unexpected token: ( ----------------------------------------- 这是出错信息。大神看看语法写错了吗
wenfeng622 2016-07-19
  • 打赏
  • 举报
回复
引用 1 楼 u010087908 的回复:
你构造的sql语句有错误
那,是哪里写错。。
NANU-NANA 2016-07-19
  • 打赏
  • 举报
回复
引用 2 楼 wenfeng622 的回复:
[quote=引用 1 楼 u010087908 的回复:] 你构造的sql语句有错误
那,是哪里写错。。[/quote] 你把最终的sql语句输出,对比一下不就知道了么。
NANU-NANA 2016-07-18
  • 打赏
  • 举报
回复
你构造的sql语句有错误

81,090

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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