1

私はしばらくの間、問題の解決策を探していましたが、成功しませんでした。

データベース内の特定のエンティティの情報をさまざまなサービスから受け取るアプリケーションがあるため、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 オブジェクトには適用されません)。

誰かがこれを解決する方法について何か考えを持っているなら、本当に感謝しています.

ありがとう。

4

1 に答える 1