web-dev-qa-db-ja.com

Room Persistenceライブラリの主キーを自動インクリメントにする方法

私はオートインクリメントとしてfoodIdを作りたいEntity(Room Persistence lib)クラスFoodを作成しています。

@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を自動インクリメントフィールドに設定するにはどうすればよいですか?

114
chandil03

autoGenerateプロパティを使う必要があります

主キーアノテーションは次のようになります。

@PrimaryKey(autoGenerate = true)

参照 ここ

247
MatPag

このように@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()
}
69
Allan Veloso

@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を未設定として扱います。

フィールドの型がIntegerまたはLong(Object)の場合(またはそのTypeConverterがそれをIntegerまたはLongに変換する場合)、Insertメソッドは項目を挿入するときにnullを未設定として扱います。

18
kunal khedkar

例えば、フィールド(firstname, lastname , email)で保存したいusersエンティティがあり、自動生成されたidが欲しい場合、これを行います。

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

Roomは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