から作成されたオブジェクトとAndroid上でOrmLiteと子のコレクションを保存する私は、オブジェクトの素敵なネストされたコレクションになってbyte[]
としてJSONオブジェクトに引っ張る私は私のアプリから呼び出すよRESTサービスを、持っています - - そのビットはすべて正常に動作します。私がしたいのは、OrmLiteを使ってこれらのオブジェクトをSQLiteストレージに永続化することです。それは、OrmLiteがネストされたオブジェクトを自動的に永続化しないため、分かりにくいものです。はジャクソン
を簡単にするために、のは、私の実際の機能を取り除く聞かせて、私のオブジェクトは、単に以下のようにモデル化することがしてみましょう:
@DatabaseTable(tableName = "parents")
public class Parent {
@DatabaseField(id=true)
private String name;
@ForeignCollectionField
// have to use Collection here because needs to be compatible with Jackson
private Collection<Child> children;
/* Getters and setters go here */
}
@DatabaseTable(tableName = "children")
public class Child {
@DatabaseField(id=true)
private String name;
@DatabaseField(foreign=true)
private Parent parent;
/* Getters and setters go here */
}
何が起こることである私がparentDao
オブジェクトを対応するデータベースに新しいParent
オブジェクトを作成追加するとき、子供たちは親と一緒に守られていません。
これは一般的な質問であり、これまでに提起されているように、これに非常に似ているSOに関する他の質問があります。特に答えがグレーの場合、 "Saving nested foreign objects with ORMLite on Android"私のPOJOを手動で作成するには問題ありません。
しかし、私はまだオブジェクトが(この場合はジャクソンに)別のライブラリによって生成されている場合には要因の答えを見ていませんでした。ジャクソンのデシリアライゼーションの内臓を深く掘り下げることなく(そのシンプルさの利点をすべて取り除く)ジャクソンに子オブジェクトを作成させてから親に追加しようとすることなく(何かが不足していない限り、この特定のケースでは特に魅力的な解決策ではないようです。
同様に、単一の子オブジェクトを処理するのに適していると思われる注釈を外部キーに追加する他の解決策がありますが、これらの注釈は@ForeignCollectionField
と対応するCollection
で作業しているときは利用できません。
?親オブジェクトを作成するたびに常にすべての子オブジェクトを作成しようとするのは残酷なようです。 – Gray
'@ForeCollectionField'アノテーションに渡すことができるパラメータがあって、その子オブジェクトを永続化するように指定するとよいでしょう。 "親の前に子供を作成する"ソリューションは、ジャクソンのようにトップダウンオブジェクトの作成にはうまくいきません(私に行方不明の別の方法がない限り) –
良いアプローチは、Stringでjacksonとシリアル化することですjsonとしてフィールドにリンクされ、完全なオブジェクトが格納されます。または、ネストされたオブジェクトに対してクエリーを実行する場合は、キーと別のオブジェクトを保存します。あなたがその答えにもっと情報を求めたいのなら、教えてください。私は答えをします。 – jeorfevre