我正在使用com.datastax.driver.core.PreparedStatement
用java准备一个cassandra查询
我的模式非常简单——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>
的集合。或者,有没有更好/更受欢迎的方法来实现我的目标,即在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"));