カサンドラに収集リテラル内のバインド変数を使用する方法 - InvalidQueryExceptionを

なくなって:

私が使用してJavaでカサンドラクエリを準備しています com.datastax.driver.core.PreparedStatement

私のスキーマは非常に簡単です- keyタイプであるtextvalueタイプの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で)動的の私の目標を達成するためのいくつかのより良い/好ま方法がありますsetJavaからカサンドラには?

報酬:

次のように行うことができます。

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"));

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=318848&siteId=1