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