私はしばらくの間、問題の解決策を探していましたが、成功しませんでした。
データベース内の特定のエンティティの情報をさまざまなサービスから受け取るアプリケーションがあるため、greenDAOs insertOrReplace メソッドを使用しているため、エンティティが DB に既に存在する場合は、再作成する代わりに更新されます。
ここまでは順調ですね。
問題は..たとえば、私のエンティティが User と呼ばれ、フィールド id、title、および displayName があるとしましょう。
したがって、最初の呼び出しで、id フィールドと title フィールドのみを持つユーザーを含む JSON オブジェクトを取得するので、それを DB に挿入すると、当然、displayName は NULL として挿入されます。
その後、別のサービスから、同じユーザー (同じ id フィールド) を含む別の JSON を取得しますが、displayName も含まれていますが、タイトル情報はまったく含まれていません。
したがって、greenDAO によって自動的に生成された DAO オブジェクトで insertOrReplace を実行するたびに、ユーザーは更新されますが、タイトル情報が存在しないため、更新されるとタイトル フィールドが NULL にリセットされるため、データが失われます。
残念ながら、サービスから返されるデータを変更することができず、この問題を解決できませんでした。特定のフィールドのみを更新し、すべてのフィールドを更新しないように DAO オブジェクトに指示する簡単な方法がないとは信じがたいです。
私はgreenDAOによって生成されたコードを見ていました.生成されたdaoオブジェクトには、クエリが実行される前に呼び出されるbindValuesメソッドがあり、明らかにオブジェクトからNULLプロパティを除外しますが、いずれにしてもNULLで更新されます価値。
親クラスからいくつかのメソッドを追加して生成される最終的なdaoオブジェクトを変更することで、ある種の修正を思いつくことができましたが、すべてのdaoに対してこれを行う必要があるため、これは良い解決策ではないと思いますオブジェクト。(カスタム スーパークラスを定義できることはわかっていますが、これはエンティティ オブジェクトにのみ適用され、DAO オブジェクトには適用されません)。
誰かがこれを解決する方法について何か考えを持っているなら、本当に感謝しています.
ありがとう。