Ich erstelle eine Entity-Klasse (Room Persistence lib), die ich foodId
als Autoincrement erstellen möchte .
@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()
}
Wie kann ich foodId
ein Autoincrement-Feld festlegen ?
android
kotlin
android-room
chandil03
quelle
quelle
0.toDouble()
Sie verwenden können,0.0
deklarieren Sie es als DoppelAntworten:
Sie müssen die
autoGenerate
Eigenschaft verwendenIhre Primärschlüsselanmerkung sollte folgendermaßen aussehen:
Referenz für PrimaryKey .
quelle
@Entity( primaryKeys = arrayOf(COLUMN_ID_LOCAL,COLUMN_ID_REMOTE))
?Insert methods treat 0 as not-set while inserting the item.
Sie können
@PrimaryKey(autoGenerate = true)
wie folgt hinzufügen :quelle
foodId
muss nicht null sein (kann es aber sein). Man könnte auch Standardwerte verwenden, z.var foodId: Int = 0
und die automatische Generierung würde richtig funktionieren.int
oderlong
0 als nullfähig behandelt wird, wenn der Typ Integer oder Long ist, ist null die Nullwert. Da Kotlin Int, wenn nicht nullbar in JVM als primitives int funktioniert, dann haben Sie Recht undvar foodId: Int = 0
werden arbeiten, abervar foodId: Int? = 0
nicht funktionieren, seit Int? wird in JVM als Integer konvertiert. @JMK, wenn Sie es auf 0 setzen, MÜSSEN Sieint
aus dem oben genannten Grund ein Nicht-Nullwert machen .val jack = User(name = "Jack", phone= 1)
In diesem Fall können Sie 0 aus dem Konstruktor entfernenfoodId
in den Body und nicht in den Konstruktor eingefügt wurde?hinzufügen
@PrimaryKey(autoGenerate = true)
beim Speichern von Daten
Typ 2
Geben Sie beim Erstellen des Objekts (mein Fallbenutzerobjekt) null oder null für die ID ein.
Wenn der Feldtyp long oder int ist (oder sein TypeConverter ihn in long oder int konvertiert), behandeln Insert-Methoden 0 beim Einfügen des Elements als nicht gesetzt.
Wenn der Feldtyp Integer oder Long (Object) ist (oder sein TypeConverter ihn in eine Integer oder Long konvertiert), behandeln Insert-Methoden null als nicht gesetzt, während das Element eingefügt wird.
quelle
val jack = User(name = "Jack", phone= 1)
In diesem Fall können Sie 0 aus dem Konstruktor entfernenquelle
@PrimaryKey(autoGenerate = true)
" - fügt Ihre Antwort diesem Thread etwas Neues hinzu?Wenn Sie beispielsweise eine
users
Entität haben , die Sie speichern möchten, mit Feldern(firstname, lastname , email)
und einer automatisch generierten ID, tun Sie dies.Der Raum generiert dann automatisch das
id
Feld und erhöht es automatisch .quelle
@PrimaryKey(autoGenerated = true) val id: Long? = null
außerhalb des Konstruktors auf den Körper der Klasse setzenKommentieren Sie Ihre Entitätsklasse mit dem obigen Code.
In Java
In Kotlin
Der Raum generiert dann automatisch das ID-Feld und erhöht es automatisch.
quelle