Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何为cassandra Scala更新Phantom中的表_Scala_Cassandra_Phantom Dsl - Fatal编程技术网

如何为cassandra Scala更新Phantom中的表

如何为cassandra Scala更新Phantom中的表,scala,cassandra,phantom-dsl,Scala,Cassandra,Phantom Dsl,我为卡桑德拉创建了下表 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 laz

我为卡桑德拉创建了下表

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\u message\u id
更新表

我可以使用
id

update().where(_.id eqs message.id)...
但是我无法使用
provider\u message\u id

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

如何使用多个字段来更新cassandra中的表

cassandra更新有一个限制,即它们只能使用主键。主键可以是一列(命名为分区键),也可以是多列(一个分区键和一个或多个集群键)

在您提供的情况下,您需要确保
id
provider\u message\u 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)
    ...
另外,请注意,您需要在所有更新查询中使用
id
provider\u message\u id
(没有通过
id
provider\u message\u id
进行更新)。您的代码将如下所示:

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