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])
答案 0 :(得分:3)
如果我没有记错,你正在使用Datastax's JavaDriver QueryBuilder。如果是这种情况,那么您正在使用一个Java库,该库需要在其接口中使用Java类型。
对于原子类型,这是除tag
类型之外的所有字段,它的工作原理是因为原子类型Scala-Java互操作性。然而,对于诸如Set
的收集类来说,这并不容易。
您需要使用Scala Java Conversion' 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()