我正在根据其文档(例如)使用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
。
什么可能导致此异常?
答案 0 :(得分:0)
如果您以前使用过Seq
,则您的数据库中可能有List
个实例。
但是,将data
字段更改为Vector
之后,驱动程序将以List
的形式从数据库读取($colon$colon
是{{1 }}),并尝试将其强制转换为::
。
您可以将List
更改为Vector
,否则您将不得不解决mongo驱动程序尝试将其读取为一个的问题。