首页 > 解决方案 > 如何使用 Phantom dsl 创建键空间和插入数据

问题描述

我第一次使用这个库,我遇到了一个问题。我根据文档做了一切,但没有任何效果,我不知道为什么。这是我的表模型:

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 方法也不起作用

标签: scalacassandraphantom-dsl

解决方案


正确阅读文档,差异会很明显。要阅读的是Database Docs

您有 2 个选项。您可以调用database.create(),这是一个阻塞创建操作,将创建数据库内的所有表。

选项 2 是调用database.taskDataCassandra.create.ifNotExists().future().

如果你不使用future(),你所拥有的只是一个生成的查询,你实际上并没有执行任何事情。如果您检查它的返回类型,database.taskDataCassandra.create.ifNotExists()它将是 a CreateQuery,如果您添加,future()则会得到 a Future[Result]

希望这是有道理的。


推荐阅读