con - cassandra java
Representación de Set en Java versus CQL (2)
Soy nuevo en Cassandra e intento agregar a una tabla un conjunto de datos. Mi mesa se ve así:
CREATE TABLE myTable (id int, name varchar, mySet set<uuid>, PRIMARY KEY (id));
El problema que encontré es cuando hago mi pedido, el tipo no es compatible, la representación de cadena de un conjunto en Java es [uuid1, uuid2, ...] y la representación en cql es {''uuid1'', ''uuid2'', ...}
session.execute("INSERT INTO myTable (id , name, mySet) VALUES (" + myID + ", ''" + myName +"'' ," + mySet + ");");
Entonces, ¿saben chicos si hay una función o una biblioteca que solucionará directamente este problema? Muchas gracias.
En lugar de anexar el contenido del conjunto a la cadena de consulta (que usa la implementación set .toString ()), en su lugar podría hacer lo siguiente (se requiere cassandra 2.0+):
session.execute("INSERT INTO myTable (id, name, mySet) VALUES (?, ?, ?));", myId, myName, mySet);
El conductor entonces se encargará de inyectar el Juego de manera adecuada para usted. También podría considerar usar BoundStatement o QueryBuilder para lograr esto también.
También le recomendaría que use declaraciones preparadas también. Además de otras razones, C * hace un montón de trabajo que almacenará en caché para cualquier consulta si se trata de un p_stmnt, lo que los hará más rápidos la próxima vez que los publique. No usar p_stmnts hará que c * repeat funcione una y otra vez en lugar de usar el caché.