android - Android房间@Relation left join
问题描述
假设我有两个实体,问题和答案,它们具有一对多的关系,每个问题可能有 0..n 个答案。它们被定义为:
@Entity(tableName="questions")
data class Question (
@PrimaryKey
val id: Long,
val questionText: String
)
@Entity(tableName="answers")
data class Answer (
@PrimaryKey
val id: Long,
val questionId: Long,
val userId: Long,
val answerText: String
)
data class QuestWithAns(
@Embeded
val question: Question,
@Relation(parentColumn = "id", entityColumn = "questionId", entity = Answer::class)
val answer: Answer?
)
如果此用户尚未回答问题,我想查询数据库并获取QuestWithAns
包含所有问题的对象列表以及只有一个或 null 的答案。userId
我尝试在 DAO 对象中实现此查询,如下所示:
@Dao
abstract class QuestionDAO {
@Query("SELECT * FROM questions AS quest LEFT OUTER JOIN (SELECT * FROM answers WHERE userid=:userId) AS ans ON quest.id = ans.questionId")
abstract fun getQuestWithAnsByUser(userId: Long): LiveData<List<QuestWithAns>>
}
但是对于这个用户没有回答的问题,room 会返回任何其他用户的最后一个答案,而不是 null。
谁能帮我确定我做错了什么?有没有办法用@Relation 来实现这个查询?
解决方案
推荐阅读
- flutter - Listview.Builder 多次显示小部件
- nginx - 如何在 Nginx 服务器上使用基本身份验证保护文件夹位置
- javascript - Netsuite 从邮件中删除附件
- firebase - Firebase ml vision 停产后如何使用 Google ML Kit?
- sql - 如何在sql中“不选择值”?
- html - 如何使用 CSS 网格制作方形图像容器
- flutter - 我在颤动中遇到了borderRadius的问题
- python - 使用 pandas 系列作为输入参数
- python - 带有活动virtualenv的python模块上的vscode调试器,“错误:无法识别的开关”对于我要传递给程序的参数?
- python - 在 ATOM 上为 python 安装包(linter 和 autopep8)