如何在Room中自动递增主键?

6
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
)

以下是我的实体类。我希望主键自动递增。 但是当我创建一个该类的对象时,如下所示:
var favouriteEntity = FavouriteEntity(

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

我需要将一个整数作为ID传递。但我希望ID能够自动增长。请帮忙。
2个回答

6

您可以简单地:

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

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

id 字段将自动生成/自增。

然后使用命名参数:例如:

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

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

当我创建这个类的一个对象时,应该为id分配什么值? 如果我将其留空,它会显示一个错误。 - noor
2
不需要数值,只需使用命名参数。 - Surrealistic

1
由于id将会自动生成,因此您可以将代码更改为:
@PrimaryKey(autoGenerate = true)
val id : Int = 0

这样你就可以跳过设置一个值:
var favouriteEntity = FavouriteEntity(
            restaurant.restaurantId,
            restaurant.restaurantName,
            restaurant.restaurantImageUrl,
            restaurant.restaurantCostForOne,
            restaurant.restaurantRating
        )

创建这个类的对象时,我应该给 id 分配什么值?如果我不填写它,会显示一个错误。 - noor
你只需要跳过id的值即可。我已经编辑了我的回答以使其更清晰明了。 - Fabio

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接