使用Datastax Cassandra Driver时无效的类型错误

时间:2018-04-18 20:01:16

标签: cassandra-3.0 playframework-2.6

我有case class表示分区键值。

case class UserKeys (bucket:Int,
                    email: String)

我按如下方式创建查询Clauses

def conditions(id: UserKeys):List[Clauses] = List(
    QueryBuilder.eq("bucket", id.bucket), //TODOM - pick table description from config/env file.
    QueryBuilder.eq("email", id.email)
  )

并使用以下查询

val selectStmt =
      select()
        .from(tablename)
        .where(QueryBuilder.eq(partitionKeyColumns(0), whereClauseList(0))).and(QueryBuilder.eq(partitionKeyColumns(1), whereClauseList(1))) 
        .limit(1)

我收到了以下错误。

com.datastax.driver.core.exceptions.InvalidTypeException: Value 0 of type class com.datastax.driver.core.querybuilder.Clause$SimpleClause does not correspond to any CQL3 type

问题1 - 我做错了什么? 该查询适用于cqlsh

我要查询的表是

CREATE TABLE users (
    bucket int,
    email text,
    firstname text,
    lastname text,
    authprovider text,
    password text,
    PRIMARY KEY ((bucket, email), firstname, lastname)

问题2 - 有没有办法打印包含查询子句的List?我尝试了但是我得到了这个难以理解的文字。

List(com.datastax.driver.core.querybuilder.Clause$SimpleClause@2389b3ee, com.datastax.driver.core.querybuilder.Clause$SimpleClause@927f81)

1 个答案:

答案 0 :(得分:0)

我的不好,我错误地使用了查询子句。而不是

.where(QueryBuilder.eq(partitionKeyColumns(0), whereClauseList(0))).and(QueryBuilder.eq(partitionKeyColumns(1), whereClauseList(1)))

我需要做

.where(whereClauseList(0)).and(whereClauseList(1)) 

因为列表已经有QueryBuilder.eq("bucket", id.bucket)部分