Android Room多层级嵌套查询问题:Poster关联Worker无法嵌入Job
Room嵌套关联查询实现问题
我有如下数据结构:Job包含Workers列表与Posters列表,每个Poster对应单个Worker。目前我能将Workers列表和Posters列表嵌入至Job对象中,但无法将单个Worker嵌入到Poster对象内。
我尝试使用Room的@Relation与@Entity注解实现,但遇到问题:Entity不能包含Relation,而要使用Relation必须关联Entity。这导致我用PosterWithWorker类给Poster添加Worker关联时,JobWithPostersAndWorkers会报错,因为PosterWithWorker不是Entity,且无法将其设为Entity。
我尝试通过外键将worker表映射至poster表,以下是相关类代码:
@Entity(tableName = "poster") data class Poster ( @PrimaryKey val poster_id: Int, val job_id: Int, val qr_code: String, var status: Int, @ColumnInfo(name = "worker_id", index = true) val worker_id: Int, val longitude: Double, val latitude: Double )
@Entity(tableName = "worker", foreignKeys = [ androidx.room.ForeignKey( entity = Poster::class, parentColumns = ["poster_id"], childColumns = ["worker_id"], onDelete = CASCADE, onUpdate = CASCADE )]) data class Worker( @PrimaryKey @ColumnInfo(name = "worker_id") val worker_id: Int, val workerName: String )
data class PosterWithWorker( @Embedded val poster: Poster, @Relation( parentColumn = "poster_id", entityColumn = "worker_id" ) val worker: Worker )
data class JobWithPostersAndWorkers( @Embedded val job: Job, @Relation( parentColumn = "job_id", entityColumn = "worker_id", associateBy = Junction(JobWorkerCrossRef::class) ) val workers: List<Worker>, @Relation(entity=Poster::class, parentColumn = "job_id", entityColumn = "job_id") val poster: List<PosterWithWorker> )
data class PosterWithWorker( @Embedded val poster: Poster, @Relation( parentColumn = "poster_id", entityColumn = "worker_id" ) val worker: Worker )
我参考了Android Room多对多关联的嵌套模式示例,但多种变体均出现错误。
我的问题:
- 是否可以不使用外键实现该需求?
- 我当前的实现哪里出错了?
内容的提问来源于stack exchange,提问作者user1743524
相关产品推荐
相关产品推荐

