Play 2.0 и MongoDB взаимодействуют с Salat

Я продолжаю получать эту ошибку с моим приложением Play 2.0:

play.core.ActionInvoker$$anonfun$receive$1$$anon$1: Execution exception [[MatchError: 4f7f4ae4251735803a942b2c (of class org.bson.types.ObjectId)]]
    at play.core.ActionInvoker$$anonfun$receive$1.apply(Invoker.scala:82) [play_2.9.1.jar:2.0]
    at play.core.ActionInvoker$$anonfun$receive$1.apply(Invoker.scala:63) [play_2.9.1.jar:2.0]
    at akka.actor.Actor$class.apply(Actor.scala:290) [akka-actor.jar:2.0]
    at play.core.ActionInvoker.apply(Invoker.scala:61) [play_2.9.1.jar:2.0]
    at akka.actor.ActorCell.invoke(ActorCell.scala:617) [akka-actor.jar:2.0]
    at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:179) [akka-actor.jar:2.0]
Caused by: scala.MatchError: 4f7f4ae4251735803a942b2c (of class org.bson.types.ObjectId)
    at com.novus.salat.transformers.in.LongToInt$class.transform(Injectors.scala:216) ~[salat-core_2.9.1-0.0.8-SNAPSHOT.jar:0.0.8-SNAPSHOT]
    at com.novus.salat.transformers.in.package$$anon$31.transform(Injectors.scala:180) ~[salat-core_2.9.1-0.0.8-SNAPSHOT.jar:0.0.8-SNAPSHOT]
    at com.novus.salat.transformers.Transformer$$anonfun$transform_$bang$1.apply(Transformer.scala:71) ~[salat-core_2.9.1-0.0.8-SNAPSHOT.jar:0.0.8-SNAPSHOT]
    at com.novus.salat.transformers.Transformer$$anonfun$transform_$bang$1.apply(Transformer.scala:71) ~[salat-core_2.9.1-0.0.8-SNAPSHOT.jar:0.0.8-SNAPSHOT]
    at scala.Option.flatMap(Option.scala:146) ~[scala-library.jar:0.11.2]
    at com.novus.salat.transformers.Transformer.transform_$bang(Transformer.scala:71) ~[salat-core_2.9.1-0.0.8-SNAPSHOT.jar:0.0.8-SNAPSHOT]

Моя модель очень проста, и я использую доступ к базе данных со вкусом SalatDao:

case class Gossip(@Key("_id") id: org.bson.types.ObjectId, title: String, link: String, description: String, permalink: String,
                  image: String, date: String) {}
object GossipDAO extends SalatDAO[Gossip, ObjectId](
  collection = MongoConnection()("gossips")("items"))

Ошибка выдается, когда я называю это:

val gossips = GossipDAO.find(ref = MongoDBObject("modificationDate" -> MongoDBObject("$gte" -> startDate))).toList

Я загрузил данные в свой MongoDB с помощью другого скрипта, и они вроде бы в порядке, так как я могу найти их в оболочке MongoDB с помощью:

 db.items.find({_id:ObjectId("4f7f4ae4251735803a942b2c")})

Более того, если я изменю условие startDate, чтобы никакие объекты не соответствовали ему, мой код работает нормально. Это указывает на то, что запрос правильный, но преобразование из MongoDBObject в класс Gossip в Scala завершается неудачно.

Что-то не так с приведенным выше кодом?

ОБНОВИТЬ

  • Мои зависимости только это:

    val appDependencies = Seq ("com.mongodb.casbah" %% "casbah"% "2.1.5-1", "com.novus" %% "salat-core"% "0.0.8-SNAPSHOT")

  • Я использую'ificationDate', потому что это поле в объекте коллекции mongoDB.

  • Когда я выполняю db.items.find({_id:ObjectId("4f7f4ae4251735803a942b2c")}), я получаю это:

https://gist.github.com/2928862

  • если вы просто получаете всю коллекцию, возникают ли такие же проблемы?

Я не знаю, как получить все объекты с помощью Salat DAO. Но когда у меня был свой класс case без ключа 'id', я смог просто выполнить db.find() в MongoConnection, и он вернул бы все доступные объекты и преобразовал их в объекты Model. То же решение, когда я добавил ключ 'id', выдает ту же ошибку, что и выше.

1 ответ

Решение

Что ж, похоже, что удаление директории target и запуск Play20 снова решили проблему. Должно быть, там была старая информация о классах.

Другие вопросы по тегам