0

我的 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 shell 中找到它们:

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

更重要的是,如果我更改 startDate 条件以便没有对象匹配它,我的代码运行良好。这表明查询是正确的,但是从 MongoDBObject 到 Scala 的 Gossip 类的转换失败。

上面的代码有问题吗?

更新

  • 我的依赖只有这样:

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

  • 我使用“modificationDate”,因为它是 mongoDB 集合对象中的一个字段。

  • 当我执行 db.items.find({_id:ObjectId("4f7f4ae4251735803a942b2c")}) 我得到这个:

https://gist.github.com/2928862

  • 如果您只是获取整个集合,是否会发生同样的问题?

我不知道如何使用 salat DAO 获取所有对象。但是当我的案例类没有 'id' 键时,我可以在 MongoConnection 上执行 db.find() ,它会返回所有可用的对象并将它们转换为模型对象。同样的解决方案,当我添加“id”键时,会产生与上面相同的错误。

4

1 回答 1

0

好吧,似乎删除“目标”目录并再次运行 Play20 解决了这个问题。那里一定有一些旧的课程信息。

于 2012-06-18T06:27:20.307 回答