你如何制作一个自动生成的复合主键?

How do you make composite primary key with one being autogenerated?

我有以下对象:

@Entity(tableName = "Section", primaryKeys = ["sectionID","number","numberOfServers"])
data class Section(
    @ColumnInfo(name = "number")
    var number: Int,

    @ColumnInfo(name = "numberOfServer")
    var numberOfServers: Int
){
    @ColumnInfo(name = "sectionID")
    var id: Long = 0
}

然后我有 DAO 方法插入房间:

@Insert(onConflict = OnConflictStrategy.IGNORE)
suspend fun insertSection(section: Section): Long

我的目标是,如果数据库中已存在具有相同 number 和 numberOfServers 对的 Section 对象,则忽略插入操作。此外,我希望该部分有一个由房间自动生成的 ID。我看到一些帖子使用索引和唯一属性来实现我的目标的复合主键部分,然后使用 @PrimaryKey(autogenerate = true) 生成 id。但是我不确定使用索引是否与 primaryKeys 一样。据我所知,如果我使用索引并将它们设置为唯一的房间,将会检查

if(index1 != unique){  
   ignore
}else if(index2 != unique){
  ignore
...
etc.

而我想要的更多是

   if((index1 && index2 combination) != unique){
      ignore
    }

根据documentation,索引似乎确实提供了我需要的功能,所以我得到了这个:

@Entity(tableName = "Section", indices = [Index(value = ["number","numberOfServer"], unique = true)])
data class Section(
    @ColumnInfo(name = "number")
    var number: Int,

    @ColumnInfo(name = "numberOfServer")
    var numberOfServers: Int
){
    @PrimaryKey(autoGenerate = true)
    @ColumnInfo(name = "sectionID")
    var id: Long = 0
}   

 

感谢您的参与