room query library foreign custom autoincrement android kotlin android-room

query - room android persistence



Cómo hacer una clave primaria como autoincremento para lib de persistencia de habitación (5)

Estoy creando un alimento de clase Entity (Room Persistence lib), donde quiero hacer foodId como autoincrement.

@Entity class Food(var foodName: String, var foodDesc: String, var protein: Double, var carbs: Double, var fat: Double) { @PrimaryKey var foodId: Int = 0 var calories: Double = 0.toDouble() }

¿Cómo puedo configurar foodId un campo de autoincremento?


Necesita usar la propiedad autoGenerate

Su anotación de clave principal debería ser así:

@PrimaryKey(autoGenerate = true)

Referencia here


Por ejemplo, si tiene una entidad de users que desea almacenar, con campos (firstname, lastname , email) y desea una identificación autogenerada, haga esto.

@Entity(tableName = "users") data class Users( @PrimaryKey(autoGenerated = true) val id: Long, val firstname: String, val lastname: String, val email: String )

La sala generará automáticamente e incrementará automáticamente el campo id .


Puede agregar @PrimaryKey(autoGenerate = true) esta manera:

@Entity data class Food( var foodName: String, var foodDesc: String, var protein: Double, var carbs: Double, var fat: Double ){ @PrimaryKey(autoGenerate = true) var foodId: Int = 0 // or foodId: Int? = null var calories: Double = 0.toDouble() }


agregar @PrimaryKey(autoGenerate = true)

@Entity public class User { public User(int id, String name, String phone) { this.id = id; this.name = name; this.phone = phone; } @PrimaryKey(autoGenerate = true) private int id; @ColumnInfo(name = "full_name") private String name; @ColumnInfo(name = "phone") private String phone; }

mientras almacena datos

db.userDao().InsertAll(new User(0,sName,sPhone));

Ponga cero para la identificación al crear el objeto (mi objeto de usuario de caso)

Si el tipo de campo es largo o int (o su TypeConverter lo convierte en largo o int), los métodos de inserción tratan 0 como no establecido al insertar el elemento.

Si el tipo de campo es Integer o Long (Object) (o su TypeConverter lo convierte en Integer o Long), los métodos de inserción tratan nulo como no establecido al insertar el elemento.


@Entity(tableName = "user") data class User( @PrimaryKey(autoGenerate = true) var id: Int?, var name: String, var dob: String, var address: String, var gender: String ) { constructor():this(null, "","","","") }