Как создать пространство ключей и вставить данные с помощью Phantom DSL - PullRequest
0 голосов
/ 17 января 2020

Я использую эту библиотеку впервые и столкнулся с проблемой. Я сделал все согласно документации, но ничего не работает, и я не знаю почему. Вот моя модель таблицы:

trait CassandraModel

object CassandraModel {

  case class TaskData(notifyid: String,
                      notifyType: String)
      extends CassandraModel

  abstract class TaskDataCassandra extends Table[TaskDataCassandra, TaskData] {
    object notifyid       extends StringColumn with PartitionKey
    object notifyType     extends StringColumn


    def store(record: TaskData): InsertQuery.Default[TaskDataCassandra, TaskData] =
      insert
        .value(_.notifyId, record.notifyId)
        .value(_.notifyType, record.notifyType)
  }
}

И база данных с DatabaseProvider:

class AppDatabase(override val connector: CassandraConnection) extends Database[AppDatabase](connector) {
  object taskDataCassandra extends TaskDataCassandra with Connector
}

trait AppDatabaseProvider extends DatabaseProvider[AppDatabase]

Итак, когда я запускаю свое приложение, я пытаюсь создать пространство ключей, но ничего не происходит

object Boot extends App with AmqpConnector with ServiceRestRoute with JsonSerializer with AppDatabaseProvider {

  override def database: AppDatabase = new AppDatabase(CassandraConnector.createCassandraConnection)

  database.taskDataCassandra.create.ifNotExists()

}

метод store также не работает

1 Ответ

1 голос
/ 18 января 2020

Внимательно прочитайте документацию, и различия будут очевидны. Нужно прочитать Документы базы данных .

У вас есть 2 варианта. Вы можете вызвать database.create(), который является операцией создания блокировки, которая создаст все таблицы внутри базы данных.

Вариант 2 - это вызов database.taskDataCassandra.create.ifNotExists().future().

Если вы не используете future(), все, что у вас есть, это сгенерированный запрос, вы на самом деле ничего не выполняете. Если вы проверите тип возврата database.taskDataCassandra.create.ifNotExists(), это будет CreateQuery, тогда как если вы добавите future(), вы получите Future[Result].

Надеюсь, это имеет смысл.

...