1

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") }

では、マップを定義する際に忘れているものはありますか? 私のサービスは機能しますが、「マップをリストにカプセル化してシリアル化する」ようなハックは好きではありません;)

4

1 に答える 1

0

Map についてはわかりませんが、代わりに埋め込みデータモデルを使用できますか?

class ServiceInfo {
...
@Embedded
MyArgs args
...
}

class MyArgs {
String key
String value
}
于 2012-06-11T08:13:54.010 に答える