Room数据库插入异常:关联表未正确填充问题求助
Room数据库关联表填充异常及Poster表数据缺失问题
问题现象
- 将API返回的对象保存到Room数据库时,所有传入参数均非空,插入调用无异常抛出,但数据库查询后发现两个问题:
- Job与Worker的关联表未正确填充(无对应关联数据)
- Poster表中缺失id为8和9的两条数据
- 此前使用本地构造的无空值测试数据时,代码运行完全正常,所有表(包括关联表)均能正确插入数据
提供的相关内容
1. API返回的JSON数据
// 实际API返回的完整JSON数据 { // 此处为用户提供的JSON内容 }
2. 数据插入核心代码
// 示例代码,实际插入逻辑如下 suspend fun batchInsert(apiResponse: ApiResponse) { db.withTransaction { jobDao.insertAll(apiResponse.jobs) workerDao.insertAll(apiResponse.workers) posterDao.insertAll(apiResponse.posters) jobWorkerRelationDao.insertAll(apiResponse.jobWorkerRelations) } }
3. Room生成的插入语句
-- Job-Worker关联表插入语句 INSERT OR ABORT INTO `job_worker_relation` (`job_id`, `worker_id`) VALUES (?, ?); -- Poster表插入语句 INSERT OR ABORT INTO `poster` (`id`, `url`, `description`) VALUES (?, ?, ?);
4. 实体类定义
Job实体
@Entity(tableName = "job") data class Job( @PrimaryKey val id: Int, @ColumnInfo(name = "job_title") val title: String, val createTime: Long )
Worker实体
@Entity(tableName = "worker") data class Worker( @PrimaryKey val id: Int, @ColumnInfo(name = "worker_name") val name: String, val skill: String )
Job-Worker关联实体
@Entity( tableName = "job_worker_relation", primaryKeys = ["job_id", "worker_id"], foreignKeys = [ ForeignKey(entity = Job::class, parentColumns = ["id"], childColumns = ["job_id"]), ForeignKey(entity = Worker::class, parentColumns = ["id"], childColumns = ["worker_id"]) ] ) data class JobWorkerRelation( @ColumnInfo(name = "job_id") val jobId: Int, @ColumnInfo(name = "worker_id") val workerId: Int )
Poster实体
@Entity(tableName = "poster") data class Poster( @PrimaryKey val id: Int, @ColumnInfo(name = "poster_url") val url: String, val content: String? )
5. 数据库表截图
需要解决的问题
- 为什么Job-Worker关联表未正确插入数据?
- 为什么Poster表中id为8和9的数据缺失?
- API返回数据与本地测试数据的差异是否是导致问题的核心原因?
内容的提问来源于stack exchange,提问作者user1743524
相关产品推荐
相关产品推荐

