通过传递变量将 SET<String> 插入到 cassandra 中

INSERT a SET<String> into cassandra by passing through a variable

INSERT INTO devices (id,dataformat,device_type_id,protocol_id,tags) VALUES ('asd','asdas','sad','asdas',{'asd','as'});

这个在 CQL 中传递 SET 时完美运行,但在使用下面的代码传递 SET 时它显示

Invalid value Set(asd, assd) of type unknown to the query builder

我使用的代码,

val statement: Statement = (QueryBuilder.insertInto("devices")).value("id",model.deviceId)
    .value("device_type_id",model.deviceType).value("protocol_id",model.protocol)
    .value("dataformat",model.dataFormat).value("tags",model.tag)
client.executeQuery(statement)
client.close()

模特是

case class AddDeviceRequestModel(deviceId: String, deviceType: String, protocol: String,
                             dataFormat: String, tag: Set[String])

如果我没记错的话,你正在使用Datastax's JavaDriver QueryBuilder。如果是这种情况,那么您正在使用 Java 库,该库在其接口中需要 Java 类型。

对于原子类型,即除 tag 类型之外的所有字段,它之所以有效,是因为原子类型 Scala-Java 具有互操作性。然而,收集 类 并不容易,例如 Set.

您需要使用Scala Java ConversionsetAsJavaSet才能传递设定值:

import scala.collection.JavaConversions.setAsJavaSet

val statement: Statement =(QueryBuilder.insertInto("devices")).value("id",model.deviceId)     .value("device_type_id",model.deviceType).value("protocol_id",model.protocol)
.value("dataformat",model.dataFormat).value("tags",setAsJavaSet(model.tag))

client.executeQuery(statement)
client.close()