我一直在使用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风格的DB访问:
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获取所有对象。但是当我的case类没有'id'键时,我能够在MongoConnection上只执行db.find()并返回所有可用对象并将它们转换为Model对象。当我添加'id'键时,同样的解决方案会产生与上面相同的错误。
答案 0 :(得分:0)
好吧,似乎删除'target'目录并再次运行Play20解决了这个问题。一定是那里的一些旧班级信息。