web-dev-qa-db-fra.com

Comment créer une clé primaire en incrémentation automatique pour la bibliothèque Room Persistence

Je crée une classe Food de Entity (Room Persistence lib), dans laquelle je veux faire foodId comme auto-incrémentation.

@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 puis-je définir foodId un champ auto-incrémenté?

130
chandil03

Vous devez utiliser la propriété autoGenerate

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

@PrimaryKey(autoGenerate = true)

Référence ici

273
MatPag

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()
}
80
Allan Veloso

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;

}

tout en stockant des données

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

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

Si le type de champ est long ou int (ou si TypeConverter le convertit en long ou int), les méthodes d'insertion traitent 0 comme non défini lors de l'insertion de l'élément.

Si le type du champ est Integer ou Long (Object) (ou que TypeConverter le convertit en Integer ou en Long), les méthodes Insert traitent la valeur null comme non définie lors de l'insertion de l'élément.

24
kunal khedkar

Par exemple, si vous voulez stocker une entité users, avec les champs (firstname, lastname , email) et que vous voulez 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 ensuite automatiquement et incrémentera automatiquement le champ id.

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