[ 求助 ]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
...全文
621 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语句有错误
2022 / 01/ 30: 新版esptool 刷micropython固件指令不是 esptool.py cmd... 而是 esptool cmd... 即可;另外rshell 在 >= python 3.10 的时候出错解决方法可以查看:  已于2022年发布的: 第二章:修复rshell在python3.10出错 免费内容: https://edu.csdn.net/course/detail/29666 micropython语法和python3一样,编写起来非常方便。如果你快速入门单片机玩物联网而且像轻松实现各种功能,那绝力推荐使用micropython。方便易懂易学。 同时如果你懂C语音,也可以用C写好函数并编译进micropython固件里然后进入micropython调用(非必须)。 能通过WIFI联网(2.1章),也能通过sim卡使用2G/3G/4G/5G联网(4.5章)。 为实现语音控制,本教程会教大家使用tensorflow利用神经网络训练自己的语音模型并应用。为实现通过网页控制,本教程会教大家linux(debian10 nginx->uwsgi->python3->postgresql)网站前后台入门。为记录单片机传输过来的数据, 本教程会教大家入门数据库。  本教程会通过通俗易懂的比喻来讲解各种原理与思路,并手把手编写程序来实现各项功能。 本教程micropython版本是 2019年6月发布的1.11; 更多内容请看视频列表。  学习这门课程之前你需要至少掌握: 1: python3基础(变量, 循环, 函数, 常用库, 常用方法)。 本视频使用到的零件与淘宝上大致价格:     1: 超声波传感器(3)     2: MAX9814麦克风放大模块(8)     3: DHT22(15)     4: LED(0.1)     5: 8路5V低电平触发继电器(12)     6: HX1838红外接收模块(2)     7:红外发射管(0.1),HX1838红外接收板(1)     other: 电表, 排线, 面包板(2)*2,ESP32(28)  

81,094

社区成员

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

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