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,
"","","","")
}