gpt4 book ai didi

android greendao 仅更新实体中的特定字段

转载 作者:行者123 更新时间:2023-11-29 21:00:22 30 4
gpt4 key购买 nike

我一直在寻找解决我的问题的方法,但没有成功。

我有一个应用程序,在该应用程序中,我从不同的服务接收数据库中特定实体的信息,因此我使用 greenDAOs insertOrReplace 方法,因此只要该实体已经存在于我的数据库中,它就会被更新而不是重新创建。

到目前为止一切顺利。

问题是.. 举个例子,我的实体名为 User,具有字段 id、title 和 displayName。

因此,在第一次调用中,我得到一个包含用户的 JSON 对象,该用户只有其 id 和 title 字段,因此我将其插入到数据库中,自然而然地,displayName 被插入为 NULL。

之后,我从另一个服务获得了另一个包含相同用户(相同 id 字段)的 JSON,但它也带有 displayName,但根本不包含标题信息。

因此,每当我在 greenDAO 自动生成的 DAO 对象上运行 insertOrReplace 时,用户都会更新,但由于标题信息不存在,当它更新时,标题字段会重置为 NULL,所以我最终丢失了数据。

很遗憾,我无法更改从服务返回的数据,也无法解决此问题。我很难相信没有简单的方法可以告诉 DAO 对象只更新某些字段而不更新所有字段。

我正在查看由 greenDAO 生成的代码,在生成的 dao 对象中有一个 bindValues 方法,该方法在查询执行之前被调用,显然它从对象中过滤掉 NULL 属性,但无论哪种方式它都会更新具有 NULL 值。

通过从父类添加一些方法来修改生成的最终 dao 对象,我能够想出某种修复方法,但我认为这不是一个好的解决方案,因为我必须这样做所有的道对象。 (我知道可以定义自定义父类(super class),但这仅适用于实体对象而不适用于 DAO 对象)。

如果有人对我如何解决这个问题有任何想法,我将不胜感激,对于冗长的解释,我深表歉意,我只是想弄清楚我的问题。

谢谢。

最佳答案

首先:除非您真的知道自己在做什么,否则我不会篡改生成的代码。修改可能会影响缓存和数据完整性。

如果您使用的是 ORM 框架(如 greendao),通常您会遵循这种(插入或)更新方法:

  1. 尝试从数据库中获取要修改的实体(也许它已经在缓存中,所以这可能不是真正的数据库操作)
  2. 如果您没有这样的实体:创建它
  3. 根据需要修改实体
  4. 在数据库中插入或更新它(在 greendao 中你会使用 insertOrReplace)

关于android greendao 仅更新实体中的特定字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26308320/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com