MongoDB Scala - scala.collection.immutable. $ Colon $ colon не может быть преобразован в scala.collection.immutable.Vector - PullRequest
0 голосов
/ 18 октября 2018

Я использую Scala Mongo Driver с отображениями кодеков Case-Class в соответствии с его документацией, такой как:

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

После изменения одного из моих классов case для использования Vector вместо Seq Iначал получать некоторые ошибки, связанные с сопоставлениями кодеков:

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 голосов
/ 23 октября 2018

Если вы уже использовали Seq, у вас, вероятно, есть экземпляры List в вашей БД.

После изменения поля data на Vector, однако, драйвер считывает из БД какList ($colon$colon - это :: из List) и пытается привести его к Vector, что невозможно.

Вместо этого вы можете изменить data на List иливам придется обойти проблему, связанную с тем, что драйвер монго пытается прочитать ее как единое целое.

...