2014-02-14 49 views
0

这个查询有什么问题?此sql查询导致此错误的错误是什么?

" where mh.parent_id = ? "+ (roleIds != null ? " or mh.role_id in (" + roleIds + ")" : "") + 

错误消息:

PreparedStatementCallback;错误的SQL语法[从用户选择u.id,u.user_id,count(distinct pf.id),IfNULL(upm.grievance_autoassign_enable,true))内部连接user_roles ur onUser.user_id = u.id left outer join user_preference_management upm on u.id = upm.id内部连接management_hierarchy mh在mh.child_id = u.id或mh.role_id = ur.role_id左外部连接(jbpm4_task jt内部连接process_flow pf在pf.pid = jt.execution_id_和pf.grievance_mgmt_id是非空)在jt.assignee_ = u.user_id其中mh.parent_id =?或者在{{role_id = 2},{role_id = 4},{role_id = 1},{role_id = 8},{role_id = 38},{role_id = 22},{role_id = 69})中的mh.role_id u.id,u.user_id order by count(pf.id)];嵌套异常是com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:您的SQL语法中有错误;检查与您的MySQL服务器版本对应的手册,以便在'= 2},{role_id = 4},{role_id = 1},{role_id = 8},{role_id = 38},{role_id = 22 },{role_id = 69})'at line 1

+0

是什么类型'roleIds'?从错误消息中的SQL中,它看起来可能是某种对象的列表?你需要把它变成一个逗号分隔的数字列表,不需要{{role_id =}'。 – andersschuller

+0

查询的其余部分和Java代码在哪里? – jbx

+0

感谢您的答复,德继承人整个查询, –

回答

0

问题是您的字符串roleIds,它似乎是JSON表示法。 SQL where..in语句的正确语法将以逗号分隔。

让你的查询看起来更像是这样的:

. . . where mh.parent_id = ? or mh.role_id in (2,4,1,8,38,22,69) group by . . .