Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/195.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Room:创建一对一关系实体_Android_Sqlite_Entity_Android Room - Fatal编程技术网

Android Room:创建一对一关系实体

Android Room:创建一对一关系实体,android,sqlite,entity,android-room,Android,Sqlite,Entity,Android Room,我正在创建一个包含房间和三张桌子(作业、标记、类别)的小项目 基本上: 作业属于(或具有)1且仅属于类别,但作业可以具有0..N个标记 一个类别有0..N个作业 标记有0..N个作业 我在尝试对所有数据建模时遇到了一些问题,尤其是在实体之间的关系方面。更具体地说,我有: fun JobListing.toJobEntityList(): List<JobEntity> { val jobEntityList = mutableListOf<JobEntity>

我正在创建一个包含房间和三张桌子(作业、标记、类别)的小项目

基本上:

  • 作业属于(或具有)1且仅属于类别,但作业可以具有0..N个标记
  • 一个类别有0..N个作业
  • 标记有0..N个作业
我在尝试对所有数据建模时遇到了一些问题,尤其是在实体之间的关系方面。更具体地说,我有:

fun JobListing.toJobEntityList(): List<JobEntity> {
    val jobEntityList = mutableListOf<JobEntity>()
    this.jobs.take(50).forEach { job: Job ->
        jobEntityList.add(
            JobEntity(
                jobId = job.id,
                title = job.title,
                url = job.url,
                companyName = job.companyName,
                jobType = job.jobType,
                publicationDate = job.publicationDate,
                relocation = job.candidateRequiredLocation,
                salary = job.salary
            )
        )
    }
    return jobEntityList
}

提前谢谢

您好,您应该像这样对数据库建模:

  • 工作类别
  • 标签
  • 作业(添加类别\u id字段并添加1个外键引用类别表)
  • Job_标记(添加标记id、Job_id字段,并添加引用类别和作业表的2个外键)

  • 非常感谢你的回答!现在的问题是,对于这个数据库模型,我如何正确地插入从网络中获取的数据?因为现在我的扩展方法
    toJobEntityList
    希望创建一个
    列表
    ,而每个
    JobEntity
    都需要一个
    categoryId
    ,我认为我当时没有,你应该先插入类别,然后插入标签,然后再插入作业和标签。如果帖子有帮助,你可以接受它作为答案,那么
    jobtag实体的
    id
    ?它不是自动生成的吗?我得到了一个
    外键约束失败(代码787 SQLITE\u constraint\u FOREIGNKEY)
    当插入该表时,我忘了将其标记为自动生成。但数据来自服务器。如果您的数据模型与此不同,并且没有将标记存储为实体,则可以修改。删除JobTagEntity并使用converter将标记存储为数组
    @Entity(
        tableName = "Jobs",
        indices = [
            Index("id", unique = true)
        ]
    )
    data class JobEntity(
        @PrimaryKey @ColumnInfo(name = "id") val jobId: Int,
        @ColumnInfo(name = "title") val title: String,
        @ColumnInfo(name = "url") val url: String,
        @ColumnInfo(name = "company_name") val companyName: String,
        @ColumnInfo(name = "job_type") val jobType: String,
        @ColumnInfo(name = "publication_date") val publicationDate: String,
        @ColumnInfo(name = "candidate_required_location") val relocation: String,
        @ColumnInfo(name = "salary") val salary: String
    )
    
    @Entity(tableName = "Category")
    data class CategoryEntity(
        @PrimaryKey @ColumnInfo(name = "id") val id: Int,
    )
    
    @Entity(tableName = "Tags")
    data class TagEntity(
        @PrimaryKey @ColumnInfo(name = "id") val id: Int,
    )
    
    @Entity(
        tableName = "Jobs",
        foreignKeys = [ForeignKey(entity = CategoryEntity::class, parentColumns = ["id"], childColumns = ["categoryid"])]
    )
    data class JobEntity(
        @PrimaryKey @ColumnInfo(name = "id") val id: Int,
        @ColumnInfo(name = "categoryid", index = true) val categoryid: Int,
        // ... other fields
    )
    @Entity(
        tableName = "JobTags",
        foreignKeys = [
            ForeignKey(entity = TagEntity::class, parentColumns = ["id"], childColumns = ["tagId"]),
            ForeignKey(entity = JobEntity::class, parentColumns = ["id"], childColumns = ["jobId"]),
        ]
    )
    data class JobTagEntity(
        @PrimaryKey @ColumnInfo(name = "id") val id: Int,
        @ColumnInfo(name = "tagId", index = true) val tagId: Int,
        @ColumnInfo(name = "jobId", index = true) val jobId: Int,
    )