如何在 Room 中插入具有一对多关系的实体

2024-03-25

我正在使用 Room 构建一个数据库,但我不知道如何将具有关系(在我的例子中是一对多)的新元素插入到数据库中。没有解决方案曾经讨论过插入(他们只讨论了查询数据)。

这是 DAO:

@Dao
abstract class ShoppingListsDao {

    @Insert
    abstract suspend fun addNewShoppingList(newShoppingList: ShoppingList)

    @Insert
    abstract suspend fun addNewItem(newItem: Item)

     // This is how I thought it would work but it didn't
     @Insert
     @Transaction
     abstract suspend fun addNewShoppingListWithItems(newShoppingListWithItems: ShoppingListWithItems)
}

这是我的实体:

@Entity
class ShoppingList(
        @PrimaryKey(autoGenerate = true)
        val listID: Int,
        val ListName: String
)

@Entity(foreignKeys = [ForeignKey(
        entity = ShoppingList::class,
        parentColumns = ["listID"],
        childColumns = ["parentListID"]
)])
class Item(
        @PrimaryKey(autoGenerate = true)
        var itemID: Int,
        val name: String,
        val quantity: Int,
        val parentListID: Int
)

据我所知,没有一种方法可以让您直接插入复合实体(例如ShoppingListWithItems)。您只需将各个实体插入到它们的表中。

在您的示例中,您需要为您的对象定义一个插入方法ShoppingList返回生成的主键的实体(以便您可以将其用于其他项目)和插入方法Item可以插入它们的完整列表的实体。

@Insert
suspend fun addNewShoppingList(newShoppingList: ShoppingList): Long
@Insert
suspend fun addNewItems(newItems: List<Item>)

然后您可以运行事务来批量插入它们。

@Transaction
suspend fun addNewShoppingListWithItems(shoppingList: ShoppingList, items: List<Item>) {

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

如何在 Room 中插入具有一对多关系的实体 的相关文章

  • Android STFP 库 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我想在我的 Android 项目中使用 SFTP 安卓已经有了吗 SFTP 库 还是我必须实现它 I
  • 在Android中将半径边框绘制到imageview或textview的一个角落

    我需要在我的应用程序中为图像视图或文本视图绘制边框 但我只需要在一个角落绘制它 就像图像一样 我做了一个形状 但我在所有 4 个边上都有边框
  • 删除视图并重新创建它

    有没有办法删除设置的视图 setContentView R layout set map center mapView MapView findViewById R id mapview 如果我再次调用此视图 则会收到一条错误消息 java
  • NumberPicker 的格式化值在单击时消失

    我的 NumberPicker 在setDescendantFocusability FOCUS BLOCK DESCENDANTS 模式和setWrapSelectorWheel false 已关闭 我用一个简单的格式化程序格式化了我的
  • Notification.Builder 中 setGroup() 的用途是什么?

    我对目标的理解有些困难setGroup http developer android com reference android app Notification Builder html setGroup java lang String
  • Android相当于javascript的setTimeout和clearTimeout?

    setTimeout 有一个答案https stackoverflow com a 18381353 433570 https stackoverflow com a 18381353 433570 它没有提供我们是否可以像在 JavaSc
  • 调试 Java InterruptedException,即查找原因

    在调试Android应用程序时 有时中断异常发生并使应用程序崩溃 我已经能够在默认异常处理程序上设置断点 但调用堆栈不提供信息 at java util concurrent locks AbstractQueuedSynchronizer
  • AOSP 中 android.Build.SERIAL 何时何地生成?

    我知道android Build SERIAL是在第一次设备启动时生成的 但我无法准确定位位置和时间 我正在建造AOSP Jelly Bean Android平板电脑 nosdcard 第二个问题 这个是序列号吗 really对所有人来说都
  • 如何将 Google Now 搜索栏添加到我的应用程序中?

    谷歌刚刚将其搜索栏从 Google Now 引入到了 Play 商店应用程序中 如下面的 gif 所示 如何将这个操作栏搜索栏实现到我自己的应用程序中 我想要 style 汉堡动画 从工具栏按钮访问 麦克风按钮 对棒棒糖设备的连锁反应 我已
  • 当编辑文本获得焦点时更改边框颜色

    我想知道当编辑文本聚焦时如何更改它的边框颜色 目前它看起来像这样 我尝试过在SDK中检查源图片 但我无法理解它 我也尝试过使用xml 但无法仅更改边框颜色 如果我找到源图片 我可以在 Photoshop 中编辑以更改颜色 有什么关于如何执行
  • Flutter Spotify Api 身份验证

    我需要在使用 Spotify api 的 Flutter 应用程序中对用户进行身份验证 我使用 flutter web auth 打开 WebView 并让用户在那里登录 我无法返回应用程序 在 Spotify 仪表板中 我将回调 Uri
  • 从 Handler.obtainMessage() 获取什么参数

    我正在使用线程来执行一些 BT 任务 我正在尝试向 UI 线程发送消息 以便我可以基于我的 BT 线程执行 UI 工作 为此 我使用处理程序 但我不知道如何检索发送到处理程序的数据 要发送数据 我使用 handler obtainMessa
  • Android 26 (O) 通知不显示操作图标 [重复]

    这个问题在这里已经有答案了 随着 Android 26 O 引入通知渠道 我一直在调查 Google 提供的com example android notificationchannels 这个示例按预期工作 直到我尝试添加Action到示
  • 无法在 Java 中输出正确的哈希值。怎么了?

    在我的 Android 应用程序中 我有一个 SHA256 哈希值 我必须使用 RIPEMD160 消息摘要算法进一步对其进行哈希值 我可以输出任何字符串的正确 sha256 和ripemd160 哈希值 但是当我尝试使用ripemd160
  • Android - 正确使用 invalidateOptionsMenu()

    我一直在寻找很多invalidateOptionsMenu 我知道它的作用 但我想不出这种方法在现实生活中有用的任何例子 我的意思是 例如 假设我们要添加一个新的MenuItem to our ActionBar 我们可以简单地获取菜单on
  • 确定视图是否在屏幕上 - Android

    我对这个有点困惑 首先也是最重要的是 以下链接很有用 但是我提出了一些可见性问题 链接 检查视图可见性 https stackoverflow com questions 4628800 android how to check if a
  • 为什么 ExpandableListView 更改 ChildView 设置(Android)?

    我对使用 ExpandableListView 有疑问 就我而言 我有两个组视图和两个子视图 而子视图由一个带有多个按钮 文本视图等的相对布局组成 例如 当首先扩展第二组并对视图持有者进行一些更改并随后扩展第一组时 先前所做的更改也会自动应
  • 在上下文操作模式下选择时,ListView 项目不会在视觉上“突出显示”

    我关注了 Android 官方网站创建上下文操作菜单的教程 http developer android com guide topics ui menus html CAB 使用下面的代码 当我长按我的 ListView 项目之一时 它确
  • Android BLE 扫描永远找不到设备

    几天以来 我尝试在我的应用程序中实现 BLE 连接 我知道我尝试连接的设备功能齐全 因此问题一定是我的代码 我用BluetoothLeScanner startScan 方法 但回调方法永远不会被调用 public void startSc
  • firebase中按范围查询

    我有一个食品价格范围滑块 根据滑块的最小值和最大值 我想显示此范围内的食品 滑块代码 multiSlider setOnThumbValueChangeListener new MultiSlider SimpleChangeListene

随机推荐

  • 在执行 job=[job] 时检测到重复的步骤 [step2]。如果任一步骤失败,则重启时将再次执行这两个步骤

    Spring Batch 决策程序将进入 forloop 我有以下要求 If Step1执行 检查决策者 是否 NO 然后结束作业 如果 Yes 然后执行Step2 如果 Step2 已完成 则执行 Decisionr f NO 然后结束作
  • H2OGeneralizedLinearEstimator() - 预测误差

    我正在尝试使用 H2OGeneralizedLinearEstimator 函数预测 Kaggle comp 中的测试时间 模型在第 3 行正常训练 指标也都很合理 然而 当我进入预测步骤时 尽管测试数据帧与训练数据帧匹配 但我还是收到错误
  • 获取 for 循环中的下一个变量

    我对 Python 很陌生 我确信有一种更简单的方法来完成我需要的事情 但这里是 我正在尝试创建一个程序 对名为的字母列表执行频率分析inputList并检索 2 个字母对并将它们添加到另一个字典中 所以我需要它用所有 2 个字母对填充第二
  • 如何在list_display中显示内联元素?

    我有以下问题 我有两个模型 文章和评论 在评论中 我有parent models ForeignKey Article 我已将其设置为将 Comments 内联到 ArticleAdmin admin ModelAdmin 和 Commen
  • 在 WooCommerce 子类别存档页面上显示子子类别术语列表

    在 Woocommerce 中我使用获取 Woocommerce 档案中当前产品类别的子类别 https stackoverflow com questions 57767843 get the subcategories of the c
  • 使用基本身份验证从 wsdl url 生成 java 类

    我正在尝试从 WSDL 文件生成 java 类 该文件使用基本身份验证 虽然有很多插件 但我必须使用以下一个 org jvnet jaxb2 maven2 maven jaxb2 plugin With wsimport or wsdl2j
  • 从 QML 生成 KeyEvent

    如何生成 KeyEvent 我必须显示 Keys onPressed 的功能以及从虚拟键盘生成的事件 那么 当我的虚拟键盘事件生成时 我可以假装生成按键事件吗 我只能找到如何从 Qt 将KeyEvents 发送到 QML 但我想从 QML
  • http.sys 究竟是如何工作的[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在尝试更深入地了解 IIS 的工作原理 我理解 http sys 是它的主要组件之一 然而 我一直很难找到有关它的易于理解的信息
  • Pygame水波纹效果

    我已经用 Google 搜索过它 但没有现成的脚本 与 Flash 上的相同效果相反 我已经检查过算法水效应解释 http www gamedev net page resources technical graphics programm
  • SuppressWarnings 不适用于 FindBugs

    我在 Eclipse 项目上运行 FindBugs 并收到一个潜在的错误警告 我想出于特定原因 在本问题的上下文之外 抑制该错误 这是代码 public class LogItem private String name private v
  • Visual Studio -- 不创建 exe 文件

    我正在使用 Visual Studio 2015 for C 并创建了以下基本程序 include
  • Bud1%@@@@E%DSDB`@@@是什么?

    我为客户制作了一个小应用程序 该应用程序扫描files包含几个文本文件的目录 然后它将每个文件读入一个字符串 每个文件都有标题和文章文本 这两部分用管道字符分隔 如下所示 article title article text 该脚本显示用于
  • 我自己的 Python OCR 程序

    我还是一个初学者 但我想写一个字符识别程序 这个程序还没有准备好 而且我编辑了很多 所以评论可能不完全一致 我将使用 8 个连通性来标记连通分量 from PIL import Image import numpy as np im Ima
  • 文件夹浏览器对话框的问题

    如果对话框中单击Make newfolder 则开始编辑刚刚创建的文件夹的名称并单击OK OKdialogrezalt返回 但在属性中SelectedPath他将文件夹命名为New文件夹 然后就有默认的名称 发生这种情况是因为当我们创建时
  • 为什么对 Deref::deref 结果断言会因类型不匹配而失败?

    以下是Deref示例来自Rust 编程语言 https doc rust lang org book first edition deref coercions html除了我添加了另一个断言 为什么assert eq与deref也相等 a
  • 如何在nodeJS项目中使用Jest全局Setup和Teardown?

    我使用 jest 将测试添加到我的 Node js 项目中 但对于每个测试套件 都有一个 beforeAll 方法用于创建新的测试服务器并连接到 mongo 数据库 还有一个 afterAll 方法用于关闭测试服务器和数据库 我想对所有测试
  • AWS DocumentDB 与 Robo 3T (Robomongo)

    我想将 Mac 笔记本电脑上的 Robo 3T 以前称为 robomongo 与 AWS 的 DocumentDB 连接 我遵循了大量教程 但找不到任何特定于 DocumentDB 的教程 在测试阶段 它通过了步骤 1 连接到我的 EC2
  • INSTALL_FAILED_OLDER_SDK 的 minSdkVersion 低于设备 API 版本

    在全新安装最新的 AndroidStudio 时 运行新项目模板 最小 SDK 选择为 15 ICS 尝试在运行 API 19 的 Nexus 5 上运行 我收到 INSTALL FAILED OLDER SDK 错误并显示以下输出 我没有
  • 类型不匹配:无法从连接转换为连接

    我想要 JDBC 连接到 MS Access 但 Class forName sun jdbc odbc JdbcOdbcDriver Connection con DriverManager getConnection jdbc odbc
  • 如何在 Room 中插入具有一对多关系的实体

    我正在使用 Room 构建一个数据库 但我不知道如何将具有关系 在我的例子中是一对多 的新元素插入到数据库中 没有解决方案曾经讨论过插入 他们只讨论了查询数据 这是 DAO Dao abstract class ShoppingListsD