如何将主键作为 Room Persistence 库的自动增量
How to make primary key as autoincrement for Room Persistence lib
我正在创建一个实体 (Room Persistence Library) class 食物,我想在其中制作 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
自动增量字段?
您需要使用 autoGenerate
属性
你的主键注释应该是这样的:
@PrimaryKey(autoGenerate = true)
参考 PrimaryKey。
例如,如果您有一个要存储的 users
实体,其字段为 (firstname, lastname , email)
并且您想要自动生成 ID,则执行此操作。
@Entity(tableName = "users")
data class Users(
@PrimaryKey(autoGenerate = true)
val id: Long,
val firstname: String,
val lastname: String,
val email: String
)
Room 将自动生成并自动递增 id
字段。
您可以这样添加@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 {
@PrimaryKey(autoGenerate = true)
private int id;
@ColumnInfo(name = "full_name")
private String name;
@ColumnInfo(name = "phone")
private String phone;
public User(){
}
//type-1
public User(String name, String phone) {
this.name = name;
this.phone = phone;
}
//type-2
public User(int id, String name, String phone) {
this.id = id;
this.name = name;
this.phone = phone;
}
}
同时存储数据
//type-1
db.userDao().InsertAll(new User(sName,sPhone));
//type-2
db.userDao().InsertAll(new User(0,sName,sPhone));
type-1
If you are not passing value for primary key, by default it will 0 or
null.
2 型
在创建对象(我的案例用户对象)时为 ID 输入 null 或零
如果字段类型是 long 或 int(或其 TypeConverter 将其转换为 long 或 int),Insert 方法在插入项目时将 0 视为未设置。
如果字段的类型是 Integer 或 Long (Object)(或其 TypeConverter 将其转换为 Integer 或 Long),Insert 方法在插入项目时将 null 视为未设置。
@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,
"","","","")
}
使用以下代码注释您的实体 class。
在Java中:
@PrimaryKey(autoGenerate = true)
private int id;
在科特林中:
@PrimaryKey(autoGenerate = true)
var id: Int
Room 将自动生成并自动递增 id 字段。
这对我有用:
@Entity(tableName = "note_table")
data class Note(
@ColumnInfo(name="title") var title: String,
@ColumnInfo(name="description") var description: String = "",
@ColumnInfo(name="priority") var priority: Int,
@PrimaryKey(autoGenerate = true) var id: Int = 0//last so that we don't have to pass an ID value or named arguments
)
请注意,id 是最后一个,以避免在创建实体时必须使用命名参数,然后再将其插入 Room。将其添加到房间后,在更新实体时使用 id。
这么多答案后令人难以置信,但最终我的做法略有不同。我不喜欢主键可以为空,我想将它作为第一个参数,并且还想在不定义它的情况下插入它,而且它不应该是 var.
@Entity(tableName = "employments")
data class Employment(
@PrimaryKey(autoGenerate = true) val id: Long,
@ColumnInfo(name = "code") val code: String,
@ColumnInfo(name = "title") val name: String
){
constructor(code: String, name: String) : this(0, code, name)
}
在下面的示例中,当您创建新用户时,按构造函数中的方式传递参数。 Room 会自动生成 id。所有用户对象 ID 都已在 id setter 中设置为 int 默认值,因此不要调用 setId
@Entity
public class User {
@PrimaryKey(autoGenerate = true)
private int id;
@ColumnInfo(name = "full_name")
private String name;
@ColumnInfo(name = "phone")
private String phone;
public User(String name, String phone) {
this.name = name;
this.phone = phone;
}
public void setId(int id){
this.id = id;
}
}
我正在创建一个实体 (Room Persistence Library) class 食物,我想在其中制作 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
自动增量字段?
您需要使用 autoGenerate
属性
你的主键注释应该是这样的:
@PrimaryKey(autoGenerate = true)
参考 PrimaryKey。
例如,如果您有一个要存储的 users
实体,其字段为 (firstname, lastname , email)
并且您想要自动生成 ID,则执行此操作。
@Entity(tableName = "users")
data class Users(
@PrimaryKey(autoGenerate = true)
val id: Long,
val firstname: String,
val lastname: String,
val email: String
)
Room 将自动生成并自动递增 id
字段。
您可以这样添加@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 {
@PrimaryKey(autoGenerate = true)
private int id;
@ColumnInfo(name = "full_name")
private String name;
@ColumnInfo(name = "phone")
private String phone;
public User(){
}
//type-1
public User(String name, String phone) {
this.name = name;
this.phone = phone;
}
//type-2
public User(int id, String name, String phone) {
this.id = id;
this.name = name;
this.phone = phone;
}
}
同时存储数据
//type-1
db.userDao().InsertAll(new User(sName,sPhone));
//type-2
db.userDao().InsertAll(new User(0,sName,sPhone));
type-1
If you are not passing value for primary key, by default it will 0 or null.
2 型
在创建对象(我的案例用户对象)时为 ID 输入 null 或零
如果字段类型是 long 或 int(或其 TypeConverter 将其转换为 long 或 int),Insert 方法在插入项目时将 0 视为未设置。
如果字段的类型是 Integer 或 Long (Object)(或其 TypeConverter 将其转换为 Integer 或 Long),Insert 方法在插入项目时将 null 视为未设置。
@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,
"","","","")
}
使用以下代码注释您的实体 class。
在Java中:
@PrimaryKey(autoGenerate = true)
private int id;
在科特林中:
@PrimaryKey(autoGenerate = true)
var id: Int
Room 将自动生成并自动递增 id 字段。
这对我有用:
@Entity(tableName = "note_table")
data class Note(
@ColumnInfo(name="title") var title: String,
@ColumnInfo(name="description") var description: String = "",
@ColumnInfo(name="priority") var priority: Int,
@PrimaryKey(autoGenerate = true) var id: Int = 0//last so that we don't have to pass an ID value or named arguments
)
请注意,id 是最后一个,以避免在创建实体时必须使用命名参数,然后再将其插入 Room。将其添加到房间后,在更新实体时使用 id。
这么多答案后令人难以置信,但最终我的做法略有不同。我不喜欢主键可以为空,我想将它作为第一个参数,并且还想在不定义它的情况下插入它,而且它不应该是 var.
@Entity(tableName = "employments")
data class Employment(
@PrimaryKey(autoGenerate = true) val id: Long,
@ColumnInfo(name = "code") val code: String,
@ColumnInfo(name = "title") val name: String
){
constructor(code: String, name: String) : this(0, code, name)
}
在下面的示例中,当您创建新用户时,按构造函数中的方式传递参数。 Room 会自动生成 id。所有用户对象 ID 都已在 id setter 中设置为 int 默认值,因此不要调用 setId
@Entity
public class User {
@PrimaryKey(autoGenerate = true)
private int id;
@ColumnInfo(name = "full_name")
private String name;
@ColumnInfo(name = "phone")
private String phone;
public User(String name, String phone) {
this.name = name;
this.phone = phone;
}
public void setId(int id){
this.id = id;
}
}