带有scala转换的datastax cassandra java驱动程序问题(play 2.3.x)

带有scala转换的datastax cassandra java驱动程序问题(play 2.3.x),scala,cassandra,scala-collections,datastax,datastax-java-driver,Scala,Cassandra,Scala Collections,Datastax,Datastax Java Driver,这一切都发生在Play 2.3.x应用程序中,带有scala模板 我正在使用此导入: import com.datastax.driver.core.Row 和这个案例课一起 case class timeOnPage(ip: String, pages: Map[String, Long]) 我使用以下代码生成带有cassandra行的timeOnPage实例: private def times(row: Row): timeOnPage = timeOnPage(row.ge

这一切都发生在Play 2.3.x应用程序中,带有scala模板

我正在使用此导入:

import com.datastax.driver.core.Row
和这个案例课一起

case class timeOnPage(ip: String, pages: Map[String, Long])
我使用以下代码生成带有cassandra行的timeOnPage实例:

 private def times(row: Row): timeOnPage =
    timeOnPage(row.getString("ip"), row.getMap("page", classOf[String], classOf[Long]).toMap)
代码可以正常编译,但运行时会返回以下错误:

[InvalidTypeException: Column page is a map of class java.lang.String->class java.lang.Long (CQL type map<varchar, bigint>), cannot be retrieve as a map of class java.lang.String->long]
两种类型都不检查


对此有什么见解吗?提前感谢您

这并不漂亮,但这会将您的Map[String,java.lang.Long]强制为Map[String,Long],从而允许java驱动程序正确创建其预期类型的映射,然后使用instanceof将其强制为Map[String,Long]:

private def times(行:行):timeOnPage=
timeOnPage(row.getString(“ip”)、row.getMap(“page”、classOf[String]、classOf[java.lang.Long])。toMap.asInstanceOf[Map[String,Long]]
提供了一些更多的指导,如创建隐式转换以将Map[String,java.lang.Long]转换为Map[String,Long],例如:

导入scala.collection.JavaConverters_
隐式def convMap(in:java.util.Map[String,java.lang.Long]):Map[String,Long]=
in.asScala.toMap.mapValues(Long2long)
专用def时间(行:行):timeOnPage=
timeOnPage(row.getString(“ip”)、row.getMap(“page”、classOf[String]、classOf[java.lang.Long]))
classOf[java.lang.Long]
Class.forName("java.lang.Long")