Estoy creando un alimento de clase Entity (Room Persistence lib), donde quiero hacer foodId
como autoincremento.
@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?
android
kotlin
android-room
chandil03
fuente
fuente
0.toDouble()
usar, puede0.0
declararlo como un dobleRespuestas:
Necesitas usar la
autoGenerate
propiedadSu anotación de clave principal debería ser así:
Referencia para PrimaryKey .
fuente
@Entity( primaryKeys = arrayOf(COLUMN_ID_LOCAL,COLUMN_ID_REMOTE))
?Insert methods treat 0 as not-set while inserting the item.
Puedes agregar
@PrimaryKey(autoGenerate = true)
así:fuente
foodId
no necesita ser nulo (pero puede serlo). También se podrían usar valores predeterminados, por ejemplo.var foodId: Int = 0
y el autogenerado funcionaría correctamente.int
olong
, 0 se trata como nulo, cuando el tipo es Entero o Largo, nulo es nulo. Dado que Kotlin Int cuando los valores no nulables funcionan en JVM como int primitivo, ¿tiene razón yvar foodId: Int = 0
funcionará, perovar foodId: Int? = 0
no funcionará desde Int? se convierte en JVM como Integer. @JMK, si lo pone a 0, DEBE hacer un no anulableint
por la razón mencionada anteriormente.val jack = User(name = "Jack", phone= 1)
en este caso, puede eliminar 0 del constructorfoodId
se colocó en el cuerpo y no en el constructor?añadir
@PrimaryKey(autoGenerate = true)
mientras almacena datos
tipo 2
Poner nulo o 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.
fuente
val jack = User(name = "Jack", phone= 1)
En este caso, puede eliminar 0 del constructorfuente
@PrimaryKey(autoGenerate = true)
": ¿su respuesta agrega algo nuevo a este hilo?Por ejemplo, si tiene una
users
entidad que desea almacenar, con campos(firstname, lastname , email)
y desea una identificación autogenerada, haga esto.La sala generará automáticamente e incrementará automáticamente el
id
campo.fuente
@PrimaryKey(autoGenerated = true) val id: Long? = null
fuera del constructor, en el cuerpo de la claseAnote su clase de entidad con el código anterior.
En java
En kotlin
La sala generará automáticamente e incrementará automáticamente el campo id.
fuente