2014-02-14 2 views
0

Что не так в этом вопросе? СообщениеЧто случилось с этим запросом sql, чтобы вызвать эту ошибку?

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

Ошибка:

PreparedStatementCallback; Плохая грамматика SQL [select u.id, u.user_id, count (distinct pf.id), IfNULL (upm.grievance_autoassign_enable, true) от пользователей u внутреннее соединение user_roles ur на ur.user_id = u.id left external join user_preference_management upm on u.id = upm.id внутреннее объединение management_hierarchy mh on mh.child_id = u.id или mh.role_id = ur.role_id left external join (jbpm4_task jt внутреннее соединение process_flow pf на pf.pid = jt.execution_id_ и pf.grievance_mgmt_id is не null) на jt.assignee_ = u.user_id где mh.parent_id =? или mh.role_id в ({role_id = 2}, {role_id = 4}, {role_id = 1}, {role_id = 8}, {role_id = 38}, {role_id = 22}, {role_id = 69}) группе по u.id, u.user_id порядок по счету (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}) 'в строке 1

+0

Какой тип 'roleIds'? Из SQL в сообщении об ошибке, похоже, это может быть список какого-то объекта? Вам нужно будет превратить его в список, разделенный запятыми только номерами, без '{role_id =}'. – andersschuller

+0

Где находится остальная часть запроса и код Java? – jbx

+0

Спасибо за ответ, ЭРВО Teh всего запроса, –

ответ

0

Проблема заключается в вашей строке roleIds, которая, как представляется, в обозначении JSON. Правильный синтаксис для оператора SQL where..in будет разделен запятой.

Сделайте ваш запрос выглядеть следующим образом:

. . . where mh.parent_id = ? or mh.role_id in (2,4,1,8,38,22,69) group by . . . 
Смежные вопросы