2016-08-07 5 views
0

dire que j'ai la requête CQL3 suivante:Cassandra: tourner la pagination de Java

QueryString = "SELECT id1, id2, link_type, visibility, data, time, version from keyspace.table where id1 = id1 and link_type = link_type and id2 **IN id2s** and time>= minTime and time<= maxTime ORDER BY time desc limit= rowLimit;" 
  1. Si je mets en œuvre comme un Statement = new Statement (QueryString) je reçois cette erreur (en raison des crochets dans les id2s: une liste):

pas d'alternative viable à l'entrée '[' (... et link_type = 123456789 et [ID2] IN ...)

---> comment dois-je convertir le List<Long> id2s à une liste sans parenthèses, mais avec des parenthèses: (item1, item2, item3)

  1. Si je la requête comme mettre en œuvre un PreparedStatement :

PreparedStatement prepared = session.prepare(query);

la première erreur a été résolu, mais je reçois une autre:

ne peut pas p les requêtes d'âge avec ORDER BY et une restriction IN sur la clé de partition ; vous devez soit supprimer la clause ORDER BY ou IN et trier côté client ou désactiver la pagination pour cette requête

----> comment dois-je tourner la pagination avec une instruction préparée (i su trouver des solutions uniquement avec l'instruction simple: statement.setfetchSize() mais pas avec Prepared Solution)

Si j'utilise une instruction simple, j'ai un problème avec les parenthèses/parenthèses et si j'utilise une instruction préparée pour résoudre le dernier, j'ai un problème avec la pagination.

Une idée?

+0

Pourquoi mettez-vous pas un très grand nombre comme la limite? D'ailleurs vous n'obtenez pas la pagination avec ceci comme vous n'avez pas un décalage défini pour sélectionner les pages suivantes – Matthias

+0

J'ai placé 10000 comme limite et j'ai le même problème. Je reçois ceci seulement avec la clause de commande par limite ... – KNag

+0

Je suis également confronté au même problème. Y at-il un moyen de sortir?, comme nous le faisons «paginer» dans la console? – Shettyh

Répondre

0

En Java, vous pouvez désactiver la pagination cassandra par le code suivant

Statement statement = new SimpleStatement(query); 
statement.setFetchSize(Integer.MAX_VALUE); 

et exécutez l'instruction.

session.execute(statement); 

Il devrait fonctionner correctement