Android Room级联删除一对多关系
Posted
技术标签:
【中文标题】Android Room级联删除一对多关系【英文标题】:Android Room cascade delete for a one to many relationship 【发布时间】:2020-07-27 18:03:00 【问题描述】:假设我有两个实体,锻炼和锻炼,锻炼(一)和锻炼(多)之间存在一对多的关系。实体是这样设置的
锻炼实体:
@Entity(
tableName = "workouts",
indices = [Index("startDate")]
)
data class Workout(
@PrimaryKey
val startDate: String,
val workoutName: String
)
运动实体:
@Entity
data class Exercise(
@PrimaryKey(autoGenerate = true)
val exerciseId: Long = 0,
val workoutId: String,
val name: String
)
锻炼锻炼:
@Entity(
foreignKeys = [ForeignKey(
entity = Workout::class,
parentColumns = arrayOf("startDate"),
childColumns = arrayOf("workoutId"),
onDelete = ForeignKey.CASCADE
)]
)
data class Exercise(
@PrimaryKey(autoGenerate = true)
val exerciseId: Long = 0,
val workoutId: String,
val name: String
)
这是我获得与锻炼相关的练习的方式:
@Transaction
@Query("SELECT * FROM workouts WHERE startDate = :startDate")
suspend fun getWorkoutWithExercises(startDate: String): WorkoutWithExercises
所以我的问题是,如果包含练习的锻炼实例被删除,相关练习是否也会被删除?如果没有,这将如何实现?
谢谢
【问题讨论】:
【参考方案1】:练习也将被删除,因为您已经为表格练习创建了Foreign Key
。
【讨论】:
以上是关于Android Room级联删除一对多关系的主要内容,如果未能解决你的问题,请参考以下文章
Flask 学习-84.Flask-SQLAlchemy 一对多关系级联删除