なくなって:
私が使用して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からカサンドラには?
報酬:
次のように行うことができます。
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"));