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シェルで次のコマンドを使用してデータを見つけることができるため、問題ないようです。
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
- コレクション全体を取得するだけの場合、同じような問題が発生しますか?
salatDAOですべてのオブジェクトをフェッチする方法がわかりません。しかし、「id」キーのないケースクラスがある場合、MongoConnectionでdb.find()を実行するだけで、使用可能なすべてのオブジェクトが返され、Modelオブジェクトに変換されます。同じ解決策で、「id」キーを追加すると、上記と同じエラーが発生しました。