How to make primary key as autoincrement for Room Persistence lib

前端 未结 8 1333
無奈伤痛
無奈伤痛 2020-12-07 11:55

I am creating an Entity (Room Persistence Library) class Food, where I want to make foodId as autoincrement.

@Entity
class Food(var foodName: Str         


        
相关标签:
8条回答
  • 2020-12-07 12:12

    add @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;
        }
    
    }
    

    while storing data

     //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.

    type-2

    Put null or zero for the id while creating object (my case user object)

    If the field type is long or int (or its TypeConverter converts it to a long or int), Insert methods treat 0 as not-set while inserting the item.

    If the field's type is Integer or Long (Object) (or its TypeConverter converts it to an Integer or a Long), Insert methods treat null as not-set while inserting the item.

    0 讨论(0)
  • 2020-12-07 12:12
    @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,
            "","","","")
    }
    
    0 讨论(0)
  • 2020-12-07 12:17

    For example, if you have a users entity you want to store, with fields (firstname, lastname , email) and you want autogenerated id, you do this.

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

    Room will then autogenerate and auto-increment the id field.

    0 讨论(0)
  • 2020-12-07 12:21

    You can add @PrimaryKey(autoGenerate = true) like this:

    @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()
    }
    
    0 讨论(0)
  • 2020-12-07 12:27

    You need to use the autoGenerate property

    Your primary key annotation should be like this:

    @PrimaryKey(autoGenerate = true)
    

    Reference for PrimaryKey.

    0 讨论(0)
  • 2020-12-07 12:29

    This works for me:

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

    Note that the id is last to avoid having to use named arguments when creating the entity, before inserting it into Room. Once it's been added to room, use the id when updating the entity.

    0 讨论(0)
提交回复
热议问题