valori Rappresentazione di Set in java contro CQL




set java (2)

Sono nuovo a Cassandra e cerco di aggiungere a un tavolo una serie di dati. Il mio tavolo ha il seguente aspetto:

CREATE TABLE myTable (id int, name varchar, mySet set<uuid>, PRIMARY KEY (id));

Il problema che ho incontrato è quando faccio la mia richiesta il tipo non sono compatibili, la rappresentazione in stringa di un insieme in Java è [uuid1, uuid2, ...] e la rappresentazione in cql è {'uuid1', 'uuid2', ...}

session.execute("INSERT INTO myTable (id , name, mySet) VALUES (" + myID + ", '" + myName +"' ," + mySet + ");");

Quindi conosci ragazzi se c'è una funzione o una libreria che risolverà direttamente questo problema. Molte grazie.


Invece di accodare il contenuto dell'insieme alla stringa della query (che utilizza l'implementazione .toString () impostata, si potrebbe invece fare quanto segue (cassandra 2.0+ richiesto):

session.execute("INSERT INTO myTable (id, name, mySet) VALUES (?, ?, ?));", myId, myName, mySet);

L'autista si prenderà quindi cura di iniettare il set correttamente per te. Potresti anche considerare l'utilizzo di un BoundStatement o QueryBuilder per ottenere questo risultato.


Ti raccomanderei anche di usare anche dichiarazioni preparate. Oltre ad altri motivi, C * fa un sacco di lavoro che memorizzerà nella cache per qualsiasi query, se è un p_stmnt, rendendoli più veloci la prossima volta che li rilasci. Non usare p_stmnts farà sì che c * ripeti il ​​lavoro più e più volte invece di usare la cache.





cql