Grails (2.0.3) アプリケーションでプラグイン mongodb-morphia (0.7.8) を使用しており、タイプ Map の問題を実験しています。タイプ Map のマップをデータベースに保存したいのですが、それをグルーヴィーファイルに入れると:
class ServiceInfo {
String name
Map<String,?> args
Date dateCreated // autoset by plugin
Date lastUpdated // autoset by plugin
static constraints = {
name nullable:false
}
}
次のエラーが表示されます。
2012-04-29 14:39:43,876 [pool-2-thread-3] エラー MongodbMorphiaGrailsPlugin - mongodb ドメイン アーティファクトの処理エラー > fr.unice.i3s.modalis.yourcast.provider.groovy.ServiceInfo: 不明なタイプ... かなり悪い...助けを呼んで、手を振って...ええ!
ファイルで Map を指定しようとしました:
Map args
その場合、次の簡単な警告が表示されます。
INFO: MapKeyDifferentFromString は fr.unice.i3s.modalis.yourcast.provider.groovy.ServiceInfo.args について不平を言いました: マップはオブジェクト (マップ) によってキー付けできません。サポートされているパラメーター化された型を使用する (マップ)
オブジェクトを保存しようとすると、属性 args がデータベースで単純に省略されます。情報については、私のオブジェクトには次のような表現があります。
def icalReader= new ServiceInfo(name:"IcalReader", args:['uri':DEFAULT_URL, 'path':"fr.unice.i3s.modalis.yourcast.sources.calendar.icalreader/"])
icalReader.save()
最後に、args がリストであるとだけ言うと、次のようになります。
List args
そして、オブジェクトを変更して、マップを 1 つだけ持つリストを取得します。警告があります。
注意: 多値フィールド 'fr.unice.i3s.modalis.yourcast.provider.groovy.ServiceInfo.args' は異種コレクションの可能性があります。確認できません。この警告を取り除くには、有効な型を宣言してください。ヌル
しかし、すべてが正常に機能し、マップがデータベースに正しく保存されています。
{ "_id" : ObjectId("4f9be39f0364bf4002cd48ad"), "name" : "IcalReader", "args" : [ { "path" : "fr.unice.i3s.modalis.yourcast.sources.calendar.icalreader/", " uri" : "http://localhost:8080/" } ]、"dateCreated" : ISODate("2012-04-28T12:33:35.838Z")、"lastUpdated" : ISODate("2012-04-28T12:33 :35.838Z") }
では、マップを定義する際に忘れているものはありますか? 私のサービスは機能しますが、「マップをリストにカプセル化してシリアル化する」ようなハックは好きではありません;)