Как использовать переменную связывания внутри литерала коллекции в Кассандре - InvalidQueryException - PullRequest
0 голосов
/ 19 марта 2020

Я готовлю запрос на кассандру в java, используя com.datastax.driver.core.PreparedStatement

Моя схема очень проста - key типа text и value типа set<text> , Я готовлю заявление следующим образом:

mySession.prepare("UPDATE a.table USING TTL :ttl SET value = value + {:value} WHERE key = :key ");

[Это сделано для того, чтобы добавить значение в набор и иметь отдельное ttl для каждого значения]

Я получил эту ошибку при оценке вышеприведенного утверждения:

com.datastax.driver.core.exceptions.InvalidQueryException: Invalid set literal for value: bind variables are not supported inside collection literals
at com.datastax.driver.core.exceptions.InvalidQueryException.copy(InvalidQueryException.java:49)
at com.datastax.driver.core.DriverThrowables.propagateCause(DriverThrowables.java:35)
at com.datastax.driver.core.AbstractSession.prepare(AbstractSession.java:86)

Как мне преодолеть это исключение и связать мою переменную с коллекцией типа set<text>. В качестве альтернативы, есть ли лучший / предпочтительный способ достижения моей цели динамического (с разными TTL) добавления элементов в set в Кассандре из java?

1 Ответ

2 голосов
/ 19 марта 2020

Вы можете сделать следующее:

PreparedStatement st = session.prepare("UPDATE test2 USING TTL :ttl SET value = value + :value WHERE name = :name ");
session.execute(st.bind()
                .setInt("ttl",1)
                .setSet("value", ImmutableSet.of("add this value"))
                .setString("name","key1"));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...