Как сделать первичный ключ в качестве автоинкремента для сохранения комнаты lib


Я создаю Entity (Room Persistence lib) class Food, где я хочу сделать foodId как автоувеличение.

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

как я могу установить foodId поле autoincrement?

4 76

4 ответа:

вы должны использовать autoGenerate свойства

ваша аннотация первичного ключа должна быть такой:

@PrimaryKey(autoGenerate = true)

ссылка здесь

Вы можете добавить @PrimaryKey(autoGenerate = true) такой:

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

добавить @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;

}

в то время как хранение данных

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

поставить ноль для id при создании объекта (мой случай объекта пользователя)

Если тип поля long или int (или его TypeConverter преобразует его в long или int), методы Insert обрабатывают 0 как не-set при вставке элемента.

Если поле имеет тип Integer или Long (Object) (или его TypeConverter преобразует его в целое число или Long), методы Insert обрабатывают null как не-установить при вставке элемента.

например, если у вас есть users сущность, которую вы хотите сохранить, с полями (firstname, lastname , email) и вы хотите, чтобы код автоматически, Вы делаете это.

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

номер будет автоматически генерировать и автоматически увеличивать id поле.