将列表绑定到Cassandra WHERE子句:获取“未找到请求操作的编解码器:[列出< varchar>< ->标量.集合.不可变.$冒号$冒号]”

klr1opcd  于 2022-11-05  发布在  Cassandra
关注(0)|答案(2)|浏览(118)

我试图在CQL WHERE子句中的“IN”关键字之后绑定Scala列表。
我试过这个

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”会引发
找不到所请求操作的编解码器:[列出<->标量.集合.不可变.$冒号$冒号]
如何绑定此列表?

uklbhaso

uklbhaso1#

您还应该能够:

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

或者:

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

y1aodyip2#

因为datastax库是用Java编写的,所以BoundStatement需要一个Java集合。你可以显式地将Scala集合转换为Java集合,如下所示:

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

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

相关问题