RoomDB中的ManyToMany POJOS:如何获取按连接排序编号排序的相关对象列表?

本文介绍了RoomDB中的ManyToMany POJOS:如何获取按连接排序编号排序的相关对象列表?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!,在与我在this question中使用的代码相同的代码中,我希望获得&quot;复合ManyToMany Pojo&quot;s及其相关对象列表(&Quot;Related Objects List&Quot;),并按连接表中的数字列排序。,生成的DAO方法如期获得TeacherWithCourses对象列表。这些对象的courses列表属性按预期获取相关对象;但是&quot;order by&quot;子句似乎根本不影响这些courses列表的排序方式。,我预计这些对象(List<Course> courses)中的每个内部列表都会根据连接表的tc.course_order编号进行排序;但获得的对象似乎是任意排序的。,(&Q;),这种排序可以通过SQL查询实现吗?还是必须以其他方式实现?,我将订购条件存储在此处的一个额外列中:,这是因为@Relation的工作方式。它不包括/考虑来自查询的子对象,它只使用查询来提取和构建父对象。然后,不管提供的查询如何,它都会通过根据@Relation的属性构建的查询获取父级的所有子级。,因此,要过滤和/或通过覆盖子项列表/数组来订购需要补充@Relationship的子项。,为方便起见,根据我之前的回答(因此使用AltCourse更改的列名)下面是一个易于实现(但不是最高效)的方法示例。,首先添加@DAO组件:-,显然要相应地更改以Alt开头的所有内容,以正确顺序提取课程的查询,,获取原始teachersWithCourses(其中课程未按预期排序)并将课程列表替换为附加查询提取的已排序课程的方法。,Alt以上版本已用于测试,因此表格如下:-,和,运行:-,结果如下:-,其他,另一种/更有效的方法(SQLite明智)是使用更复杂的查询以及使用@Embedded表示教师和课程的POJO。,这样,您提取了具有教师和课程的对象,然后可以从提取中构建TeachersWithCourses。,这不需要使用@Relation时运行的其他查询,因此不需要@Transaction。,注意:该示例使用的是没有唯一名称的原始教师和课程,因此必须进行相应修改。,首先是教师课程POJO:-,用于避免重复列名的前缀。,查询:-,CTE(公用表表达式)teacher_in_course检索具有指定课程ID的教师列表。这在实际查询中用于获取教师以及每个教师相应订购的所有课程。因此,不需要@Transaction,因为所有数据都是在单个查询中提取的。,但是,需要从TeacherCourse对象列表构建一个TeachersWithCourses列表,例如:-,这篇关于RoomDB中的ManyToMany POJOS:如何获取按连接排序编号排序的相关对象列表?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,
返回顶部
跳到底部

Copyright 2011-2024 南京追名网络科技有限公司 苏ICP备2023031119号-6 乌徒帮 All Rights Reserved Powered by Z-BlogPHP Theme By open开发

请先 登录 再评论,若不是会员请先 注册