332 votes

Comment créer une clé primaire en tant qu'auto-incrémentation pour la bibliothèque Room Persistence

Je crée une classe Food de type Entity (Room Persistence lib), dans laquelle je veux créer foodId en incrémentation automatique.

 @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()
}
 

Comment définir foodId un champ auto-incrémenté?

555voto

MatPag Points 12624

Vous devez utiliser la propriété autoGenerate

Votre annotation de clé primaire devrait être comme ceci:

 @PrimaryKey(autoGenerate = true)
 

Référence ici

205voto

Allan Veloso Points 881

Vous pouvez ajouter @PrimaryKey(autoGenerate = true) comme ceci:

 @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()
}
 

71voto

kunal khedkar Points 241

ajouter @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;

}

bien que le stockage des données

 db.userDao().InsertAll(new User(0,sName,sPhone));

Mettre zéro pour l'id lors de la création de l'objet (mon cas l'utilisateur de l'objet)

Si le champ est de type long ou de type int (ou de ses TypeConverter le convertit en un long ou int), Insérer des méthodes traiter 0 comme non-défini lors de l'insertion de l'élément.

Si le champ est de type Integer ou Long (Objet) (ou son TypeConverter convertit en un nombre Entier ou Longue), Insérer des méthodes traiter null en tant que non-défini lors de l'insertion de l'élément.

10voto

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

9voto

mayojava Points 134

Par exemple, si vous souhaitez stocker une entité users , avec les champs (firstname, lastname , email) et que vous souhaitez un identifiant généré automatiquement, vous procédez ainsi.

 @Entity(tableName = "users")
data class Users(
   @PrimaryKey(autoGenerated = true)
   val id: Long,
   val firstname: String,
   val lastname: String,
   val email: String
)
 

Room générera et incrémentera automatiquement le champ id .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X