MongoDB Scala-scala.collection.immutable。$ colon $ colon无法转换为scala.collection.immutable.Vector

时间:2018-10-17 21:06:23

标签: mongodb scala vector mapping case-class

我正在根据其文档(例如)使用Scala Mongo Driver和Case-Class Codecs映射:

object CodecProviders {
  lazy val codecRegistry = fromRegistries( fromProviders(
    classOf[User],
// ... other case classes
  ), DEFAULT_CODEC_REGISTRY )
}

将我的一个案例类更改为使用Vector而不是Seq后,我开始遇到一些与编解码器映射有关的错误:

  

java.lang.ClassCastException:scala.collection.immutable。$ colon $ colon   无法转换为scala.collection.immutable.Vector

case class如下:

case class MyCaseClass(metadata: Metadata, data: Vector[Item]) 

case class没什么特别的。切换到Vector的主要原因是性能上的好处(基于index的访问具有恒定的访问时间),更改为Vector后的其他案例类都可以正常工作,我碰巧得到了这个异常有时会与这个特定的类一起使用,因此我不得不将其更改回Seq

什么可能导致此异常?

1 个答案:

答案 0 :(得分:0)

如果您以前使用过Seq,则您的数据库中可能有List个实例。

但是,将data字段更改为Vector之后,驱动程序将以List的形式从数据库读取($colon$colon是{{1 }}),并尝试将其强制转换为::

您可以将List更改为Vector,否则您将不得不解决mongo驱动程序尝试将其读取为一个的问题。