【问题标题】:How to create keyspace and insert data using Phantom dsl如何使用 Phantom dsl 创建键空间和插入数据
【发布时间】:2020-05-04 07:45:37
【问题描述】:

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

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)
  }
}

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

【问题讨论】:

标签: scala cassandra phantom-dsl


【解决方案1】:

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

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

选项 2 是致电database.taskDataCassandra.create.ifNotExists().future()

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

希望这是有道理的。

【讨论】:

    猜你喜欢
    • 2016-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-27
    • 2019-08-11
    • 2016-09-11
    • 1970-01-01
    • 2015-09-06
    相关资源
    最近更新 更多