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

时间:2015-12-29 13:46:52

标签: scala cassandra cql datastax-java-driver

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])

1 个答案:

答案 0 :(得分:3)

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

对于原子类型,这是除tag类型之外的所有字段,它的工作原理是因为原子类型Scala-Java互操作性。然而,对于诸如Set的收集类来说,这并不容易。

您需要使用Scala Java Conversion&#39; setAsJavaSet来传递设定值:

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()