Android Room @Relation 查询与 join

问题描述

在我的应用程序中,我有一个包含 2 个表 Messages 和 MessageQueue 的数据库。该架构的设计使每条消息“包含”许多 MessageQueue。所以我们是一对多的关系。

@Entity(tableName = "messages")
data class Message(

    @PrimaryKey(autoGenerate = true)
    @ColumnInfo(name = "client_message_id")
    var clientMessageId: Long,@ColumnInfo(name = "message_id")
    var messageId: String,@ColumnInfo(name = "body",defaultValue = "")
    var body: String,@ColumnInfo(name = "msg_type")
    var msgType: Int = 0,@ColumnInfo(name = "message_date",defaultValue = "")
    var messageDate: String,@ColumnInfo(name = "is_income")
    var isIncome: Int,@ColumnInfo(name = "file_status")
    var fileStatus: Int = 0

)


@Entity(tableName = "messageQueue")
data class MessageQueue(

    @PrimaryKey(autoGenerate = true)
    @ColumnInfo(name = "message_queue_id")
    var messageQueueId: Long,@ColumnInfo(name = "client_message_id")
    var clientMessageId: Long,@ColumnInfo(name = "is_header")
    var isHeader: Int,@ColumnInfo(name = "status")
    var status: Int
)

现在我有一个名为 MsgWithMsgq 的 Relation Pojo

data class MsgWithMsgq(
    @Embedded
    var messageQueue: MessageQueue,@Relation(parentColumn = "client_message_id",entityColumn = "client_message_id")
    var message: Message
)

使用上述 pojo,因此我可以将 Message 与 MessageQueue.isHeader = 1 的 MessageQueue 一起使用。 这适用于我所有的查询,除了一个。

有一个查询,我想在许多字段中应用过滤器。

@Query("""Select * 
        from messagequeue 
        inner join messages on messages.client_message_id = messagequeue.client_message_id
        where messages.msg_type = 1
        and messages.is_income = 1
        and messages.file_status = 1
        and messagequeue.status = 5 or messagequeue.status = 7
        and messagequeue.is_header = 1""")
    fun getPendingFileMessages(): List<MsgWithMsgq>

上述查询有效,但它忽略了约束 and messages.file_status = 1 并获取所有可能的文件状态。

这里到底发生了什么?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)