Room Datenbank - ID als PrimaryKey weiterführen

  • Hallo :D


    Ich programmiere eine App die Room benutzt und habe eine vorhandene Datenbank. Meine Entity sieht so aus:




    Die internalId soll als PrimaryKey dienen, da ein Pokemon mehrmals vorkommen kann und sie dann trotzdem unterscheidbar sein sollen und die internalId fängt bei 1 an und erhöht sich immer um 1. Ich habe mir einen Importer und einen Exporter geschrieben, wobei der der Exporter alles exportiert auch mit inernalId und der Importer setzt dann auch die internalId, sodass "autoGenerate = true" vielleicht unnötig ist? Hier ist meine Insert Methode:



    Java
    @Insert
    fun addPokemon(vararg data: PokemonData)


    Nun ist ein Datensatz nach dem Importieren in der Datenbank gespeichert und die größte internalId ist zum Beispiel 73. Nun möchte ich ein neues Pokemon hinzufügen, aber ohne die internalId selbst zu setzen, dafür sollte denke ich "autoGenerate = true" sorgen. Allerdings setzt er die internalId dann nicht auf 74, sondern sie bleibt auf 1 und weil es die 1 schon gibt, crasht es.


    Nun könnte ich eine Abfrage nach der größten bisherigen internalId machen und diese selbst um 1 erhöhen und auch selbst setzen, aber vielleicht geht es ja auch so, dass Room das übernimmt?


    Und hier noch der relevante Fehler:

  • Hallo Wilkommen


    erstmal eine Frage wie so "var internalId: Int = 1"


    und nicht "val" var ist doch eine konstante nicht


    var ist doch in Kotlin eine Konstante nicht veränderbar.
    Auch wenn "Int" in Kotlin ein Objekt ist wird es aber vom Compiler in eine primitive Java „int“ übersetzt, die dann "final" ist.


    Kotlin : var internalId: Int = 1
    Java : final int internalId = 1;

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!