将列表绑定到 Cassandra WHERE 子句:获取"Codec not found for requested operation: [list<varchar> <->



我正试图在"IN";CQL WHERE子句中的关键字。

我试过这个

val session: com.datastax.driver.core.Session = ...
val deleteStatement = session.prepare(s"DELETE FROM table_name WHERE id IN ?;")
def deleteById(ids: List[String]): Try[Boolean] = {
val boundStatement = new BoundStatement(deleteStatement)
boundStatement.bind(ids)
session.execute(boundStatement).wasApplied()
}

但是";boundStatement.bind";投掷

找不到请求操作的编解码器:[list<->scala.collection.invariable.$colon$colon]

如何绑定此列表?

由于数据税库是用Java编写的,BoundStatement需要一个Java集合。您可以显式地将Scala集合转换为Java集合,如下所示:

boundStatement.bind(new java.util.ArrayList[String](ids.asJava))

请注意,隐式转换在这里不起作用,因为bind((方法接受java.lang.Object类型的参数,而不是更具体的参数。

您还应该能够执行:

boundStatement.bind().setList(0, ids.asJava)

或者:

boundStatement.bind().setList(0, ids.asJava, classOf[String])

最新更新