我为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) ))
}
在上表中,我希望能够基于 id
或者 provider_message_id
.
我可以使用 id
```
update().where(_.id eqs message.id)...
但是我不能用 `provider_message_id` ```
update().where(_.provider_message_id eqs callback_id)...
如何使用多个字段更新cassandra中的表
1条答案
按热度按时间j7dteeu81#
cassandra更新有一个限制,即它们只能使用主键。主键可以是一列(命名为分区键),也可以是多列(一个分区键和一个或多个集群键)。
在您提供的情况下,您需要确保
id
以及provider_message_id
是主键的一部分,带有cql的表的描述应该类似于:另外,请注意,您需要使用
id
以及provider_message_id
在所有update查询中(没有updatebyid
或者provider_message_id
). 您的代码如下所示: