2015-03-31 6 views
0

У меня есть объект модели kundera, который имеет String как Id. Это определяется следующим образом.Проблема блока Kundera и Cassandra - Строка как первичный ключ

@Id 
private String id; 

У меня есть метод, когда я выполняю собственный запрос вроде этого.

/** 
    * @param requestId 
    * @return 
    */ 
    public static ProcessRequest getRequest(Serializable requestId) { 
     List<ProcessRequest> requests = execute("SELECT * from 
      process_requests where id = '" + requestId + "';"); 
     return requests.isEmpty() ? null : requests.get(0); 
    } 

Я получаю следующее исключение при выполнении модульных тестов, подобных этому.

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] 

Даже если есть столбец определяется идентификатором, он дает это исключение, и я за помощью исчерпывающе и не мог решить. Не могли бы вы помочь решить эту проблему?

Update:

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

* Искал помощь исчерпывающе –

+0

Откройте сессию cqlsh на вашем кластере cassandra и отредактируйте свой ответ, чтобы включить вывод 'desc table process_requests'. – Aaron

+0

Я добавил описание таблицы в свой вопрос. –

ответ

1

Если вы используете CQL2 для создания вашей схемы, столбец первичного ключа с любым именем создается с именем 'key'.

Это используется Kundera, если вы используете createQuery или findById. Поскольку вы используете native query изменить where id = ... на where key = ...

PS: CQL3 является предпочтительным при работе с Kundera. Вы можете обратиться к this за дополнительной информацией о CQL3.

+0

Привет, я использую только cql3. Запрос работает нормально, когда приложение запускается нормально, но не тогда, когда оно выполняется с помощью блока cassandra. –

+0

Он работал после использования ключевого слова «ключ», но то же самое не работает, когда я запускаю приложение нормально, его работа только со встроенной кассандрой. Любой способ его решить? –

+0

Вы действительно не используете CQL2-CQL3 для создания и получения данных? –

Смежные вопросы