2015-03-31 2 views
0

J'ai une entité de modèle kundera dont la chaîne est Id. C'est défini comme ça.Problème d'unité Kundera et Cassandra - Chaîne en tant que clé primaire

@Id 
private String id; 

J'ai une méthode où j'exécute une requête native comme ceci. Je reçois l'exception suivante lors de l'exécution des tests unitaires de ce type.

17:50:38.716 [main] ERROR c.i.c.cassandra.CassandraClientBase - Error during executing query SELECT * from process_requests where id = '5b4468e0-6146-4fbc-81cf-571371834446';, Caused by: {} . 
com.impetus.kundera.KunderaException: InvalidRequestException(why:Undefined name id in where clause ('id EQ '5b4468e0-6146-4fbc-81cf-571371834446'')) 
    at com.impetus.client.cassandra.CassandraClientBase.execute(CassandraClientBase.java:2101) [kundera-cassandra-2.14.jar:na] 
    at com.impetus.client.cassandra.CassandraClientBase.executeCQLQuery(CassandraClientBase.java:1708) [kundera-cassandra-2.14.jar:na] 
    at com.impetus.client.cassandra.CassandraClientBase$CQLClient.executeQuery(CassandraClientBase.java:1851) [kundera-cassandra-2.14.jar:na] 
    at com.impetus.client.cassandra.CassandraClientBase.executeSelectQuery(CassandraClientBase.java:761) [kundera-cassandra-2.14.jar:na] 
    at com.impetus.client.cassandra.thrift.ThriftClient.executeQuery(ThriftClient.java:860) [kundera-cassandra-2.14.jar:na] 
    at com.impetus.client.cassandra.query.CassQuery.populateEntities(CassQuery.java:143) [kundera-cassandra-2.14.jar:na] 
    at com.impetus.kundera.query.QueryImpl.fetch(QueryImpl.java:1013) [kundera-core-2.14.jar:na] 
    at com.impetus.kundera.query.QueryImpl.getResultList(QueryImpl.java:164) [kundera-core-2.14.jar:na] 

Même s'il y a une colonne définie par id, il donne cette exception et j'ai de l'aide de manière exhaustive et n'a pas pu le résoudre. Pouvez-vous s'il vous plaît aider à résoudre ce problème?

Mise à jour:

CREATE TABLE docyard.process_requests (
id text PRIMARY KEY, 
content_type text, 
created_at timestamp, 
document_id text, 
lock bigint, 
lock_expiration timestamp, 
namespace text, 
process_input text, 
process_output text, 
processed text, 
updated_at timestamp, 
version_id text 
) WITH bloom_filter_fp_chance = 0.01 
AND caching = '{"keys":"ALL", "rows_per_partition":"NONE"}' 
AND comment = '' 
AND compaction = {'min_threshold': '4', 'class':   'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy',  'max_threshold': '32'} 
AND compression = {'sstable_compression': 'org.apache.cassandra.io.compress.LZ4Compressor'} 
AND dclocal_read_repair_chance = 0.1 
AND default_time_to_live = 0 
AND gc_grace_seconds = 864000 
AND max_index_interval = 2048 
AND memtable_flush_period_in_ms = 0 
AND min_index_interval = 128 
AND read_repair_chance = 0.0 
AND speculative_retry = '99.0PERCENTILE'; 
CREATE INDEX process_requests_lock_idx ON docyard.process_requests (lock); 
CREATE INDEX process_requests_processed_idx ON docyard.process_requests (processed); 
+0

* Recherche exhaustive de l'aide –

+0

Ouvrez une session cqlsh sur votre cluster Cassandra et modifiez votre réponse pour inclure la sortie de 'desc table process_requests'. – Aaron

+0

J'ai ajouté la description de la table dans ma question. –

Répondre

1

Si vous utilisez CQL2 pour créer votre schéma, la colonne de clé primaire avec un nom est créé avec le nom 'key'. Ceci est géré par Kundera si vous utilisez createQuery ou findById. Puisque vous utilisez native query, remplacez where id = ... par where key = ...

PS: CQL3 est préféré lorsque vous travaillez avec Kundera. Vous pouvez vous référer à this pour plus d'informations sur CQL3.

+0

Bonjour, je n'utilise que cql3. La requête fonctionne correctement lorsque l'application est exécutée normalement mais pas lorsqu'elle est exécutée avec l'unité cassandra. –

+0

Cela a fonctionné après avoir utilisé le mot-clé "clé" mais la même chose ne fonctionne pas lorsque je lance l'application normalement, son fonctionnement uniquement avec le cassandra intégré. Un moyen de le résoudre? –

+0

Etes-vous sûr de ne pas utiliser CQL2-CQL3 de manière interchangeable pour créer et récupérer des données? –