私はオートインクリメントとして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
を自動インクリメントフィールドに設定するにはどうすればよいですか?
このように@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を未設定として扱います。
フィールドの型がIntegerまたはLong(Object)の場合(またはそのTypeConverterがそれをIntegerまたはLongに変換する場合)、Insertメソッドは項目を挿入するときにnullを未設定として扱います。
例えば、フィールド(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
フィールドを自動生成して自動インクリメントします。
@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,
"","","","")
}