簡體   English   中英

如何在Phantom中為Cassandra Scala更新表

[英]How to update table in Phantom for cassandra Scala

我為Cassandra創建了下表

abstract class MessageTable extends Table[ConcreteMessageModel, Message] {

  override def tableName: String = "messages"

  // String because TimedUUIDs are bad bad bad
  object id extends Col[String] with PartitionKey {
    override lazy val name = "message_id"
  }

  object phone extends Col[String]

  object message extends Col[String]

  object provider_message_id extends Col[Option[String]]
  object status extends Col[Option[String]]

  object datetime extends DateColumn {
    override lazy val name = "message_datetime"
  }

  override def fromRow(r: Row): Message = Message(phone(r), message(r), Some(UUID.fromString(id(r))), None, status(r), Some( ZonedDateTime.ofInstant(datetime(r).toInstant, ZoneOffset.UTC) ))
}

在上表中,我希望能夠基於idprovider_message_id更新表。

我可以使用id輕松更新行

update().where(_.id eqs message.id)...

但是我無法使用provider_message_id更新表

update().where(_.provider_message_id eqs callback_id)...

我如何使用多個字段來更新cassandra中的表

Cassandra更新有一個限制,即它們只能與主鍵一起使用。 主鍵可以是一列(稱為分區鍵),也可以是多列(一個分區鍵以及一個或多個集群鍵)。

如果要提供,則需要確保idprovider_message_id都是主鍵的一部分,帶有cql的表的描述應類似於以下內容:

cqlsh:> DESCRIBE keyspace1.messages;
...
CREATE TABLE keyspace1.messages (
    id text,
    phone text,
    message text,
    provider_message_id text,
    status text,
    datetime date,
    PRIMARY KEY (id, provider_message_id)
) WITH CLUSTERING ORDER BY (provider_message_id ASC)
    ...

另外,請注意,您將需要在所有更新查詢中使用idprovider_message_id (沒有通過idprovider_message_id更新)。 您的代碼將如下所示:

update().where(_.id eqs message.id).and(_.provider_message_id eqs callback_id)...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM