Room 中是否可以忽略基本更新中的字段

2023-12-23

我有以下实体:

@Entity
class Foo(
    @PrimaryKey
    @ColumnInfo(name = "id")
    val id: Long,

    @ColumnInfo(name = "thing1")
    val thing1: String,

    @ColumnInfo(name = "thing2")
    val thing2: String,

    @ColumnInfo(name = "thing3")
    val thing3: String,

    @ColumnInfo(name = "thing4")
    val thing4: String
) {

    @ColumnInfo(name = "local")
    var local: String? = null

}

其中本地信息不存储在服务器上,仅存储在手机本地。

目前,当我从服务器提取信息时,GSON 自动填充我的值,但由于“本地”不是来自服务器,因此不会填充到该对象中。

有没有一种方法,当我调用更新时,我可以让 Room 跳过“本地”列的更新,而无需编写自定义更新来插入除“本地”之外的所有其他列?痛点是我可能有很多列,并且添加的每个新列,我都必须将其添加到自定义插入语句中。

我还考虑过从服务器实体到新的“本地”实体的一对一映射,但是现在我必须在获得实体的任何地方处理连接语句的痛苦,因为我需要本地信息。

我希望我能做这样的事情:

@Entity
class Foo(
    @PrimaryKey
    @ColumnInfo(name = "id")
    val id: Long,

    @ColumnInfo(name = "thing1")
    val instructions: String,

    @ColumnInfo(name = "thing2")
    val instructions: String,

    @ColumnInfo(name = "thing3")
    val instructions: String,

    @ColumnInfo(name = "thing4")
    val instructions: String
) {

    @Ignore
    var local: String? = null

}

使用 @Ignore 注释,尝试忽略通用更新中的本地字符串。然后提供自定义更新语句以仅保存本地信息

@Query("UPDATE foo SET local = :newLocal WHERE foo.id = :id")
fun updateLocal(id: Long, newLocal: String)

然而,ROOM 似乎足够聪明,可以检查我是否在本地属性上使用了 @Ignore,并且它不会使用该更新语句进行编译。

有任何想法吗?


部分更新已添加到房间中2.2.0

在 Dao 中,您执行以下操作:

// Here you specify the target entity
@Update(entity = Foo::class)
fun update(partialFoo: PartialFoo)

沿着你的实体Foo创建一个PartialFoo包含主键和要更新的字段。

@Entity 
class PartialFoo {
    @ColumnInfo(name = "id")
    val id: Long,

    @ColumnInfo(name = "thing1")
    val instructions: String,
}

https://stackoverflow.com/a/59834309/1724097 https://stackoverflow.com/a/59834309/1724097

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Room 中是否可以忽略基本更新中的字段 的相关文章

  • Gradle 错误:在操作系统独立路径“META-INF/androidx.localbroadcastmanager_localbroadcastmanager.version”中找到多个文件

    我需要android 图像裁剪器我的 Android 应用程序的库 所以我将其添加到 gradle 依赖项中 同步后 出现了一些错误 这是一个 gradle 无法修复 发现多个文件具有与操作系统无关的路径 META INF androidx
  • 如何使用 WifiEnterpriseConfig 设置“使用系统证书”

    我想为我的应用程序的用户配置企业 WiFi 网络 因此 用户必须输入用户名和密码 其余的由应用程序处理 身份验证由 RADIUS 服务器 FreeRadius 3 处理 该服务器使用 LetsEncrypt 颁发的证书 因此无需导入我自己的
  • Facebook4j API:搜索

    我正在使用 Facebook4j 通过关键字获取状态 facebook4j conf ConfigurationBuilder fac new facebook4j conf ConfigurationBuilder fac setDebu
  • 如何将Android中的cURL发送到REST服务

    我是 android 新手 我想从 REST 服务获取一些数据 但在初始化发送到 REST 服务的方法时遇到一些问题 您知道 REST 服务使用 cURL 来操作一些数据 POST PUT GET DELETE 现在如何在 android
  • 使用Picasso从url保存图像?

    我正在尝试使用 API Picasso 保存图像 为了做到这一点 我正在尝试使用Target保存 但我无法完成这项工作 我怎么能这样做呢 Trying save image public static void imageDownload
  • 如何在Android中访问现有的sqlite数据库?

    到目前为止 我们已经在 Android 中开发了在运行时创建数据库的应用程序 我们想知道如何在 Android 应用程序中访问预构建或现有的数据库 sqlite 文件 请提供详细信息 查看文档android database sqlite
  • Firebase Messaging FCM 在可配置的时间间隔内分发

    当您使用 FCM 向给定应用程序的所有设备发送推送时 这可能会导致许多用户同时打开他们的应用程序 从而导致大量服务器轮询 从而导致负载峰值 有没有一种方便的方法可以在给定的时间间隔内分发消息以进行计划推送 最后 我们找到了一种可能的方法 通
  • 尝试获取屏幕上绘制的每个随机圆圈的 x、y 坐标

    您好 我正在制作一款游戏 该游戏将在屏幕上创建随机圆圈 随机创建的圆圈的值为红色或绿色 我的问题是 我希望不仅能够确定用户何时单击其中一个圆圈 而且还能够确定他们最终单击的圆圈 红色或绿色 下面是我的代码 我的主要问题是试图找到将要绘制的圆
  • 如何在 Android Studio 中构建项目测试目录?

    目前还没有这方面的约定 但是现在我如何构建 Android Studio 的测试目录呢 Android 测试基础 http developer android com tools testing testing android html页面
  • Android volley使用RequestFuture.get()时出现超时异常

    在我的片段中 我尝试使用 TMDB 的开放电影数据库来获取有关 正在播放 电影的详细信息 如果我使用 RequestFuture get time TimeUnit 方法来执行此齐射请求 我总是会收到超时错误 如果我在 Safari 中手动
  • Flutter - 删除 ListView 中项目之间的空间

    我正在使用 ListView builder 函数来创建项目列表 然而 iOS 中每个项目之间的空间很大 截图 你知道如何删除项目吗 看来是默认的 因为我没有添加它 code 列表显示 return Scaffold body ListVi
  • 如何使用共享首选项在两个 Android 应用程序之间共享数据?

    我有两个应用程序 App1 和 App2 我想使用共享首选项在 App1 中保存数据并在 App2 中访问 反之亦然 我可以在 App1 中保存数据并在 App2 中访问数据 但反之则不行 这就是我现在正在做的 在清单中 android s
  • 如何使用 MotionLayout 调整 TextView 的大小

    我正在尝试创建一个CollapsingToolbar动画使用MotionLayout 我已经成功地将所有内容设置为动画 使其表现得像CollapsingToolbar具有高度的灵活性 这意味着我可以轻松创建很棒的动画 而无需编写大量代码 我
  • 如何为 flutter 绘图应用实现橡皮擦功能

    有一个关于通过 flutter 创建绘图应用程序的视频 YouTube https www youtube com watch v yyHhloFMNNA 它支持当用户点击屏幕时绘制线 点 但我找不到像 Android 本机那样擦除用户绘制
  • 分离 Fragment 和删除 Fragment 有什么区别?

    在 Android 文档中碎片交易 http developer android com reference android app FragmentTransaction html我注意到两种非常相似的方法 detach and remo
  • 通知操作而不启动新活动?

    我计划提供一个包含两个操作的提醒通知 一个用于批准登录请求 一个用于拒绝登录请求 通过单击这些操作中的任何一个 我希望向我的服务器发出 HTTP 请求 最重要的是 我不想启动新的 Activity 或根本不想将用户重定向到我的应用程序 Co
  • 如何向开关对象添加/更改波纹效果

    下面是我自定义的开关 红圈是默认的波纹效果 我发现设置一个波纹可绘制作为开关的背景 控制波纹的颜色
  • Android Jetpack Compose 尺寸随持续时间变化的动画

    如何在 Jetpack Compose 中添加内容大小更改动画的持续时间 尝试使用Modifier animateContentSize 并通过动画规格具有持续时间 但它只是突然进入或退出 没有观察到持续时间 Column Modifier
  • android 中的 java.net.URL ..新手问题

    我是java新手 正在尝试android开发 以下代码生成 malformedURLException 有人可以帮助我识别异常吗 任何提示都会非常有帮助 package com example helloandroid import and
  • 在 Qt 中构建 Android 项目不再有效

    所以我对 Android SDK NDK 和 Apache Ant 进行了一些更新 现在我无法构建任何 Android 项目 我收到一条警告 然后它说找不到 build xml 文件 错误 Warning Android platform

随机推荐

  • 如何利用 Robot Framework 编写正则表达式来查找/替换各种日期字符串

    我使用机器人框架进行自动化测试 将文件读入变量 我正在解析该变量的各种日期格式 并尝试使用正则表达式将日期替换为当前日期 我正在努力解决的是让正则表达式在机器人框架中工作 我已经在各种网站 如 pythex 和 regex101 中编写了正
  • 函数重载和模板推导优先级

    考虑以下函数声明 template
  • 什么是不变性以及为什么我应该担心它?

    我读过几篇关于不变性的文章 但仍然没有很好地理解这个概念 我最近在这里创建了一个线程 其中提到了不变性 但由于这本身就是一个主题 所以我现在正在创建一个专门的线程 我在过去的帖子中提到 我认为不变性是使对象只读并赋予其低可见性的过程 另一位
  • Django 1.2:登录问题(GET参数:next)

    我有一个关于 django 的新问题 这些天我发布了一个丢失的问题 这是我的情况 我有一个自定义登录视图 在设置中注册为登录 url 我在其中对用户进行身份验证 我选择创建自定义视图以便能够添加消息和日志记录 身份验证工作正常 但我对 GE
  • 如何在 RSpec 中包含多个模块?

    我不确定如何将多个模块包含到 RSpec 中 所以让我描述一下我的情况 Under app helpers我有两个带有帮助程序的文件 其中包含模块ApplicationHelper and MailersHelper 尽管这些是我在视图和邮
  • Android 中的 Glide 多种变换

    我一直在使用 Glide 在我的应用程序中加载图像 我有一个自定义转换 我在加载图像时使用它ImageView 问题是我想应用我的自定义转换 centerCrop两者都在获取的图像上 但 Glide 仅使用我的自定义转换并在中显示图像Ima
  • 来自 C++ 模型的 QML MapPolygon

    我想动态添加 删除 编辑MapPolygon在 QML 地图应用程序中 我还有一些其他创建多边形的工作 文件导出 导入等 所以我认为我应该使用MapItemView使用 C 模型提取多边形数据 我尝试使用自己的基于 QObject 的对象创
  • 如何使用 image 在 solana 上创建令牌,并立即禁用铸造新令牌?

    我尝试搜索 但旧指南说创建令牌并将其添加到 solana 存储库的令牌列表中 但它现在是只读的 我尝试搜索 但我发现的所有内容都不是有效的解决方案 死服务和诈骗服务什么的允许禁用 mint 并将 self 添加为 token cotrole
  • 访问用于绑定 gridview 的数据或 dataItem

    我有一个 gridview 我以编程方式设置数据源并将其数据绑定到对象集合 对于创建的每一行 我在字段中使用不同的方法从对象中提取相关信息 如下所示
  • 如何处理通知中混合的 RTL 和 LTR 语言?

    背景 Android 4 3增加了大量对RTL 从右到左 语言的支持 例如希伯来语和阿拉伯语 问题 即使有 textDirection layoutDirection 和 gravity 我也找不到通知生成器的等效项 甚至在兼容性库中也找不
  • 如何创建更新触发器以增加/减少 1 个数字到总票数

    我有两张表 posts id title content total votes 1 title1 content1 3 2 title2 content2 2 votes id id post value
  • 为什么 UISearchBar 在返回时会出现奇怪的闪烁?

    我的 UINavigationItem 的 titleView 中有一个 UISearchBar 与 UISearchController 关联 当我向后导航时 它似乎在闪烁 有人以前见过这个吗 闪光视频 https www youtube
  • GitHub 是否限制对公共“原始”文件的访问?

    GitHub 有公共访问限制吗 示例文件 https raw githubusercontent com vuejs vue dev package json 如果一百万个用户下载这个文件会发生什么 这是来自 GitHub 员工关于 原始
  • Rails 在 64 毫秒内完成 406 不可接受

    我的网站上有一个表格 其中有一个页面可以编辑 删除 添加邮箱 http example com settings mailboxes http example com settings mailboxes http example com
  • NuGet 用于多个项目的解决方案

    假设我有一个包含 3 个项目的解决方案 Core UI Tests 我使用的一些 NuGet 包将适用于所有 3 个项目 有些仅适用于 UI 和测试 有些仅适用于测试 如 NUnit 是什么right使用 NuGet 进行设置的方法 当我需
  • Python 内省:如何获取类方法的变量名?

    我想获取类方法的关键字参数的名称 我想我了解如何获取方法的名称以及如何获取特定方法的变量名称 但我不知道如何组合这些 class A object def A1 self test1 None self test1 test1 def A2
  • 优化 Delphi 中的类大小。有没有类似“打包课程”之类的东西?

    我正在尝试优化 Delphi 类的大小 以便它们占用尽可能少的内存 因为我创建了大量的类 问题是 课程本身很小 但并没有占据我预期的空间 例如 如果我有 type MyClass class private mMember1 integer
  • 打开外部终端键绑定不起作用

    I can t open a new external terminal with CTRL SHIFT C Did a new update remove this function I was able to use this shor
  • 如何实现“require_global”?

    现在的情况 我有当前版本我的 MVC 框架使用类作为控制器 我有一些 老式 模块oldMVC 框架使用简单 扁平的包含作为控制器 非常简单 这意味着 新版本 旧版本 我现在正在尝试编写
  • Room 中是否可以忽略基本更新中的字段

    我有以下实体 Entity class Foo PrimaryKey ColumnInfo name id val id Long ColumnInfo name thing1 val thing1 String ColumnInfo na