Android 房间多对一关系

Android room many-to-one relationship

我找不到关于这种关系的任何信息(一切都是关于一对一、一对多或多对多)。甚至那些对于我需要的东西来说看起来有点太复杂了。

我有一个 table 任务和一个 table 图像。为了省事space,多个任务可以有同一张图片(删除任务时图片不会被删除)。我有一个任务实体

import android.graphics.Bitmap
import androidx.room.*

@Entity(tableName = "tasks")
class Task(
    @PrimaryKey(autoGenerate = true)
    val id: Long,

    val imageId: Long = 0,

    // this needs a foreign key to Image
    val image: Image
)

还有一张图片

import androidx.room.ColumnInfo
import androidx.room.PrimaryKey

@Entity(tableName = "images")
class Image (
    @PrimaryKey(autoGenerate = true)
    val id: Long,

    val title: String,
    @ColumnInfo(typeAffinity = ColumnInfo.BLOB)
    val data: ByteArray? = null
)

如何为 imageId 列添加 foreignKey 使其指向 Image?我可以直接获取一个 Image 对象作为 Task 的成员而不必创建另一个 class 吗?

你必须在这里使用 one-to-many 关系。 d.android.com 中有一个 example。如果您这样做,您将拥有一个任务实体、一个图像实体和数据 class TaskWithImage,就像在提供的示例中一样。

data class TaskWithImage(
    @Embedded val task: Task,
    @Embedded(prefix = "img_") val image: Image
)

@Query("""
    SELECT * FROM tasks
    INNER JOIN images as img_ ON tasks.id = img_.id
""")
fun getTasksWithImage(): List<TaskWithImage>