Запрашивая в БД список записей, используя причины mybatis: неожиданный токен «IN» был найден следующим - PullRequest
0 голосов
/ 09 июля 2019

Есть идеи, что может быть не так с mybatis mapper?

Запустив этот SQL вручную, я получаю ожидаемые результаты ..

SELECT * FROM TABLE_NAME WHERE ID = '304ed0ea-07c1-4261-bb0f-b44036f285e6' AND RUN_ID IN ('be7e0d61-bdb4-4341-ab35-fd5007e99e58');

И SQL выглядит так же в моем картографе xml ..

<select id="selectByIdAndRunIds" parameterType="java.util.HashMap" resultMap="result">
  SELECT * FROM TABLE_NAME
  WHERE ID = #{id} AND RUN_ID IN
  <foreach item="item" collection="runIds" open="(" separator="," close=")">
      #{item}
  </foreach>
</select>

Ява ..

public List<SomeObject> selectByIdAndRunIds(final String id, final List<String> runIds) {
    SqlSession session = MyBatisSqlSession.getInstance().getSqlSessionFactory().openSession(true);

    Map<String, Object> input = new HashMap<>();
    input.put("id", id);
    input.put("runIds", runIds);

    List<SomeObject> result = session.selectList("selectByIdAndRunIds", input);

    session.close();
    return result;
}

Это ошибка, которую я получаю:

### Error querying database.
Cause: com.ibm.db2.jcc.am.SqlSyntaxErrorException: 
An unexpected token "IN" was found following "= ? AND RUN_ID".  
Expected tokens may include:  "<boolean_factor>".. 
SQLCODE=-104, SQLSTATE=42601, DRIVER=4.24.92
...