Где в выборе с помощью Phantom не решает

Я играл с кодом smiple, представленным в фантомной вики, я попробовал следующее;

import com.websudos.phantom.dsl._

case class Student(id: UUID, name: String)

class Students extends CassandraTable[Students, Student] {
  object id extends UUIDColumn(this) with PartitionKey[UUID]
  object name extends StringColumn(this)

  def fromRow(row: Row): Student = {
    Student(id(row), name(row))
  }
}

object Students extends Students with Connector {

  def getByName(name: String): Future[Option[Student]] = {
    select.where(_.name eqs name).one()
  }
}

Но моя IDE продолжает говорить Cannot resolve symbol where и компилятор говорит value where is not a member of com.websudos.phantom.builder.query.RootSelectBlock[Students,Student]

Я использую Scala 2.11.6 и фантом 1.10.1, вся помощь очень ценится!

2 ответа

Я столкнулся с этой проблемой и решил ее, используя предложение @flavian выше.

Убедитесь, что ваш Connector определено неявное пространство ключей.

Это прямо из примера проекта.

trait KeyspaceDefinition {
  implicit val keySpace = KeySpace("sample_keyspace")
}

trait Connector extends SimpleConnector with KeyspaceDefinition

Вы упускаете из виду фундаментальную проблему Кассандры, вы не можете делать запросы по name поскольку это не индексированный столбец. На основании только что определенной таблицы запрос, который вы пытаетесь выполнить, является недействительным, и Cassandra сообщит вам об этом во время выполнения.

Phantom предотвратит большинство плохих вещей во время компиляции. Стоит прочитать эту серию блогов, чтобы понять, как все работает в Кассандре.

Чтобы положить вещи в перспективе, единственный where запрос, который действителен для вашего Students таблица есть:

def getById(id: UUID): Future[Option[Student]] = {
  select.where(_.id eqs id).one()
}
Другие вопросы по тегам