Estoy preparando una consulta Cassandra en Java utilizando com.datastax.driver.core.PreparedStatement
Mi esquema es muy simple - una key
que es del tipo text
y value
del tipo set<text>
. Estoy preparando la declaración de este modo:
mySession.prepare("UPDATE a.table USING TTL :ttl SET value = value + {:value} WHERE key = :key ");
[Esto se hace con el fin de añadir un valor al conjunto y tienen por separado ttl
para cada valor]
Tengo este error en la evaluación de la declaración anterior:
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)
¿Cómo puedo superar esta excepción y se me trabó la variable a una colección de tipo set<text>
. Por otra parte, hay algunos mejores / modo preferido de lograr mi meta de forma dinámica (con diferentes TTL) añadir elementos a una set
de Cassandra de java?
Usted puede hacer de la siguiente manera:
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"));