cha*_*l03 151 android kotlin android-room
我正在创建一个Entity(Room Persistence lib)类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自动增量字段?
Mat*_*Pag 296
您需要使用该autoGenerate属性
您的主键注释应如下所示:
@PrimaryKey(autoGenerate = true)
参考这里
All*_*oso 89
您可以@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()
}
Ren*_*tik 36
经过这么多答案后令人难以置信,但最后我的做法几乎没有什么不同。我不喜欢主键可以为空,我想将它作为第一个参数,并且还想在不定义它的情况下插入,而且它也不应该是 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)
}
kun*_*kar 27
加 @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视为未设置.
Chr*_*gue 13
这对我有用:
@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
)
请注意,在将实体插入 Room 之前,id 是最后一个以避免在创建实体时必须使用命名参数。将其添加到房间后,在更新实体时使用 id。
小智 6
例如,如果您有一个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字段。
小智 6
@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,
        "","","","")
}
在下面的示例中,当您创建新用户时,请按构造函数中的方式传递参数。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;
    }
}
| 归档时间: | 
 | 
| 查看次数: | 69510 次 | 
| 最近记录: |