首页 > 解决方案 > 我可以将非主键字段作为房间中的自动生成值吗

问题描述

我有带有复合主键的表。我可以将其中一个文件设为自动生成吗?

Secenario :我有一个teacher table包含字段 techerId、name、gender、role、department、grade 并且它具有由角色、部门和等级组成的复合主 ID。如何使teacherid自动生成?

标签: androidsqliteandroid-roomandroid-database

解决方案


如果您通过THIS ANSWER,您会发现我们不能在复合主键中具有自动增量属性。因此,解决方法是使用indexingand的概念unique constraint。将role, deptt,grade列设为您indices并将unique约束设置为true. 这将确保这三个值的对始终是唯一的(如primaryKey)。然后在实体中添加techerIdas Primarykey(autoGenerate = true)。你的entity课程看起来像:

@Entity(tableName = "teacher",indices = arrayOf(Index(value = ["role","department","grade"],unique = true)))
public class Teacher{
    @PrimaryKey(autoGenerate = true)
    int teacher_id;

    @ColumnInfo(name = "name")
    String teacher_name;

    //Rest of the fields
    ......
    ......
}

推荐阅读