如何以列表形式选择字段数据?

问题描述 投票:0回答:1

我的数据库将数据存储在收据和文件实体中。这些实体具有一对多关系(一张收据可以有多个文件)。我需要选择“带文件的收据”,但不是这些表中的所有字段。

我想从收据实体中选择

id
description
createdAt
,并从文件实体中选择
imageUrl
。这些实体包含我不需要的其他字段,我想创建一个显示基本信息的列表。

我尝试了这个,但收到错误:

无法弄清楚如何从光标读取此字段

@Dao
abstract class ReceiptDao  {
    @Query(
        """
        SELECT id, description, createdAt, (SELECT imageUrl FROM files WHERE receiptId == :id) as listOfImageUrls
        FROM receipts
        WHERE id == ":id"
        ORDER BY createdAt DESC
        """ )
    abstract fun findReceiptsWithFilesById(id: Long): List<ReceiptWithFiles>
}

class ReceiptWithFiles(
    val id: Long,
    val description: String? = null,
    val createdAt: LocalDateTime? = null,
    val listOfImageUrls : List<String> = listOf(),
)
android kotlin sqlite android-room
1个回答
0
投票

通常,您会在 POJO 中使用

@Embedded
@Relation
的组合。

  • @Embedded
    嵌入父对象(收据),
    @Relaion
    嵌入子对象(列表)

所以:-

class ReceiptWithFiles(
    @Embedded
    val receipts: Receipt,
    @Relation(entity = Files::class, parentColumn= "id", entityColumn="receiptId")
    val files: List<Files>
)

您可以使用以下方式调用上面的内容

@Transaction
@Query("SELECT * FROM receipts WHERE id =:id ORDER BY createdAt DESC")
abstract fun findReceiptsWithFilesById(id: Long): List<ReceiptWithFiles>

这并不完全返回所述字段(id、description 和 createAt),而是返回整个 Receipts 对象,其中包括所述字段和相关文件对象列表。

  • 注意以上是原则代码,尚未编码、编译或运行。
© www.soinside.com 2019 - 2024. All rights reserved.