How to auto increment primary key in Room?

Viewed 4995
data class FavouriteEntity(
    @PrimaryKey(autoGenerate = true)
    val id : Int?,
    @ColumnInfo(name = "user_id") var userId : String,
    @ColumnInfo(name = "fav_restaurant_id") var favouriteRestaurantId : String,
    @ColumnInfo(name = "fav_restaurant_name") var favouriteRestaurantName : String,
    @ColumnInfo(name = "fav_restaurant_img") var favouriteRestaurantImage : String,
    @ColumnInfo(name = "fav_restaurant_price") var favouriteRestaurantPrice : String,
    @ColumnInfo(name = "fav_restaurant_rating") var favouriteRestaurantRating : String
)

Above class is my Entity class. I want the primary key to auto increment. But when I create an object of the class like :

var favouriteEntity = FavouriteEntity(

            userId,
            restaurant.restaurantId,
            restaurant.restaurantName,
            restaurant.restaurantImageUrl,
            restaurant.restaurantCostForOne,
            restaurant.restaurantRating
        )

I need to pass an integer as the id. But i want to id to auto-increment. Please help.

2 Answers

You can simply:

data class FavouriteEntity(
    @PrimaryKey(autoGenerate = true)
    val id : Int = 0 
)

or

data class FavouriteEntity(
    @PrimaryKey(autoGenerate = true)
    val id : Int? = null 
)

and the id field will auto-generate/auto-increment the id field.

Then use it with named parameters: e.g.

data class FavouriteEntity(
        val id: Int = 0,
        val name: String
)

fun main() {
    FavouriteEntity(name = "name")
}

As the id will be autogenerated, you can change your code to:

@PrimaryKey(autoGenerate = true)
val id : Int = 0

This way you can skip setting a value:

var favouriteEntity = FavouriteEntity(
            restaurant.restaurantId,
            restaurant.restaurantName,
            restaurant.restaurantImageUrl,
            restaurant.restaurantCostForOne,
            restaurant.restaurantRating
        )
Related