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 снова решили проблему. Должно быть, там была старая информация о классах.