Ответ 1
Получил ответ на Datastax bugzilla, он в настоящее время не поддерживается, но запланирован
https://issues.apache.org/jira/browse/CASSANDRA-4210
Обновление: поддерживается в Cassandra 2.0.1
Я пытаюсь запустить следующий запрос
SELECT edge_id, b_id FROM booking_by_edge WHERE edge_id IN ?
Я связываю Java-список Long как параметр и получаю исключение
SyntaxError: line 0:-1 mismatched input '<EOF>' expecting ')' (ResultSetFuture.java:242)
Если я пытаюсь использовать (?), он ожидает привязки одного длинного элемента, но мне нужна коллекция
Есть ли ошибка в моем синтаксисе?
Получил ответ на Datastax bugzilla, он в настоящее время не поддерживается, но запланирован
https://issues.apache.org/jira/browse/CASSANDRA-4210
Обновление: поддерживается в Cassandra 2.0.1
Протестировано в Cassandra 2.1.3, работает следующий фрагмент кода:
PreparedStatement prepared = session.prepare("SELECT edge_id, b_id FROM booking_by_edge WHERE edge_id IN ?;");
List<Long> edgeIds = Arrays.asList(1L, 2L, 3L);
session.execute(prepared.bind(edgeIds));
Это немного сложно найти в документации, но описано в разделе кортежей руководства.
Если вы хотите использовать именованные параметры, вы должны использовать метод setList().
BoundStatement bs = session.prepare("select col from table where col in :values").bind();
bs.setList("values", Arrays.asList(v1, v2, v3));