簡體   English   中英

如何在多對多關系 Room 數據庫中查詢?

[英]How to Query in a many to many relationship Room database?

我有一個包含三個表的多對多關系 Room 數據庫:

第一:

data class Name(
@PrimaryKey(autoGenerate = true)
var nameId : Long = 0L,
@ColumnInfo(name = "name")
var name : String = "",
@ColumnInfo(name = "notes")
var notes: String=""
)

第二:

@Entity(tableName = "tags_table")
data class Tag(
@PrimaryKey(autoGenerate = true)
var tagId : Long = 0L,
@ColumnInfo(name = "tag_name")
var tagName : String = ""
)

第三:

@Entity(
    tableName = "tagInName_table",
    primaryKeys = ["nameId", "tagId"],
    foreignKeys = [
        ForeignKey(
            entity = Name::class,
            parentColumns = ["nameId"],
            childColumns = ["nameId"]
        ),
        ForeignKey(
            entity = Tag::class,
            parentColumns = ["tagId"],
            childColumns = ["tagId"]
        )
    ]
)
data class TagInName(
    @ColumnInfo(name = "nameId")
    var nameId: Long = 0L,
    @ColumnInfo(name = "tagId")
    var tagId: Long = 0L

)

我在查詢中用於返回 object 的數據 class:

data class NameWithTags(
    @Embedded
    val name: Name,
    @Relation(
        parentColumn = "nameId",
        entityColumn = "tagId",
        associateBy = Junction(value = TagInName::class)
    )
    val listOfTag : List<Tag>
)

這就是我查詢獲取所有 NamesWithTags 的方式:

@Query("SELECT * FROM names_table")
@Transaction
fun getNamesWithTags() : LiveData<List<NameWithTags>>

所以我需要做的是,我需要查詢返回LiveData<List<NameWithTags>>其中每個 NamesWithTags 都有一個包含我查詢的標簽 ID 的列表。

根據我對您所說您需要做的事情的解釋,然后:-

@Transaction
@Query("SELECT names_table.* FROM names_table JOIN tagInName_table ON names_table.nameId = tagInName_table.nameId JOIN tags_table ON tagInName_table.tagId = tags_table.tagId WHERE tags_table.tagId=:tagId ")
fun getNameWithTagsByTagId(tagId: Long): LiveData<List<NamesWithTags>>
  • 請注意,以上是原理代碼,尚未編譯或測試,因此可能包含一些錯誤。
  • NameWithTags 將包含所有相關標簽,根據這些標簽應該沒問題(其中每個 NamesWithTags 都有一個包含標簽 ID 的列表),如果您只想要標簽列表中的某些標簽,那么它會稍微復雜一點,這在 a Android 的最新答案帶有嵌套 object 條件的房間查詢

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM