Estou criando uma classe Entity (Room Persistence lib) Food, onde quero fazer foodId
como incremento automático.
@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()
}
Como posso definir foodId
um campo de incremento automático?
android
kotlin
android-room
chandil03
fonte
fonte
0.toDouble()
você pode usar0.0
, declare-o como um duploRespostas:
Você precisa usar a
autoGenerate
propriedadeSua anotação de chave primária deve ser assim:
Referência para PrimaryKey .
fonte
@Entity( primaryKeys = arrayOf(COLUMN_ID_LOCAL,COLUMN_ID_REMOTE))
?Insert methods treat 0 as not-set while inserting the item.
Você pode adicionar
@PrimaryKey(autoGenerate = true)
assim:fonte
foodId
não precisa ser nulo (mas pode ser). Pode-se também usar valores padrão, por exemplo.var foodId: Int = 0
e a geração automática funcionaria corretamente.int
oulong
, 0 é tratado como nulo, quando o tipo é Inteiro ou Longo, nulo é anulável. Como o Kotlin Int, quando não anulável, funciona na JVM como int primitivo, você está certo evar foodId: Int = 0
funcionará, masvar foodId: Int? = 0
não funcionará desde o Int? é convertido na JVM como Inteiro. @JMK, se você o fizer 0, terá que criar um valor não nuloint
pelo motivo acima mencionado.val jack = User(name = "Jack", phone= 1)
Nesse caso, você pode remover 0 do construtorfoodId
foi colocado no corpo e não no construtor?adicionar
@PrimaryKey(autoGenerate = true)
enquanto armazena dados
tipo 2
Coloque nulo ou zero para o ID durante a criação do objeto (objeto de usuário do meu caso)
Se o tipo de campo for longo ou int (ou seu TypeConverter o converter em longo ou int), os métodos Insert tratam 0 como não definido durante a inserção do item.
Se o tipo do campo for Inteiro ou Longo (Objeto) (ou seu TypeConverter o converte em Inteiro ou Longo), os métodos Insert tratam nulo como não definido durante a inserção do item.
fonte
val jack = User(name = "Jack", phone= 1)
Nesse caso, você pode remover 0 do construtorfonte
@PrimaryKey(autoGenerate = true)
" - sua resposta adiciona algo novo a esse tópico?Por exemplo, se você possui uma
users
entidade que deseja armazenar, com campos(firstname, lastname , email)
e deseja um ID gerado automaticamente, faça isso.A sala gerará automaticamente e incrementará automaticamente o
id
campo.fonte
@PrimaryKey(autoGenerated = true) val id: Long? = null
fora do construtor, no corpo da classeAnote sua classe de entidade com o código acima.
Em Java
Na cidade Kotlin
A sala gerará automaticamente e incrementará automaticamente o campo de identificação.
fonte