scala - 如何使用 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 方法也不起作用
解决方案
正确阅读文档,差异会很明显。要阅读的是Database Docs。
您有 2 个选项。您可以调用database.create()
,这是一个阻塞创建操作,将创建数据库内的所有表。
选项 2 是调用database.taskDataCassandra.create.ifNotExists().future()
.
如果你不使用future()
,你所拥有的只是一个生成的查询,你实际上并没有执行任何事情。如果您检查它的返回类型,database.taskDataCassandra.create.ifNotExists()
它将是 a CreateQuery
,如果您添加,future()
则会得到 a Future[Result]
。
希望这是有道理的。
推荐阅读
- typo3-9.x - Typo3 9.5:使用前端登录抓取页面
- java - SSLHandshakeException 证书
不匹配任何主题替代名称 - spring-batch - Spring Batch:CompositeItemWriter、@BeforeStep 和控制 StepExecution
- c# - Windows 系统菜单图标存储在哪里?
- node.js - 如何通过集合名称获取 Mongoose 模型?
- cors - 在 Google Forms 文档上配置/修改 CORS
- javascript - textarea.selectionEnd 总是等于 textarea.value 中的最后一个字符
- c# - 尽管我在 android 上使用“HasKey”和 Save(),为什么 PlayerPrefs 不起作用?
- marklogic - ML 是否应该能够访问映射到驱动器号的 Windows 共享驱动器上的文件?
- amazon-web-services - 部署到 AWS S3 与 github 同步