如何在InvalidQueryException中使用集合文字中的绑定变量



我正在使用com.datastax.driver.core.PreparedStatement用java准备一个cassandra查询

我的模式非常简单——keytext类型,valueset<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>的集合。或者,有没有更好/更受欢迎的方法来实现我的目标,即在java的cassandra中动态(使用不同的TTL(向set添加项目?

您可以执行以下操作:

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

最新更新