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