programing

룸 지속성 lib의 기본 키를 자동 증분으로 만드는 방법

linuxpc 2023. 8. 4. 22:44
반응형

룸 지속성 lib의 기본 키를 자동 증분으로 만드는 방법

제가 만들고 싶은 엔티티(룸 지속성 라이브러리) 클래스 음식을 만들고 있습니다.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(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)); 

제1종

기본 키 값을 전달하지 않으면 기본 키는 0 또는 null입니다.

제2종

개체(mycase 사용자 개체)를 만드는 동안 ID에 null 또는 0을 입력합니다.

필드 유형이 long 또는 int이면(또는 TypeConverter에서 long 또는 int로 변환) 항목을 삽입하는 동안 삽입 메서드는 0을 설정되지 않은 것으로 처리합니다.

필드 유형이 Integer 또는 Long(Object)인 경우(또는 TypeConverter가 이 필드를 Integer 또는 Long으로 변환), 항목을 삽입하는 동안 Insert 메서드는 null을 설정되지 않은 것으로 처리합니다.

그렇게 많은 답변을 받고도 믿을 수 없는 일이지만, 저는 결국 조금 다르게 했습니다.기본 키가 null인 것을 좋아하지 않습니다. 첫 번째 인수로 사용하고 정의하지 않고 삽입하고 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)
}

이것은 나에게 도움이 됩니다.

@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가 마지막입니다.룸에 추가된 후 엔티티를 업데이트할 때 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,
        "","","","")
}

예를 들어, 다음과 같은 경우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
)

그러면 룸이 자동 생성되고 자동 증가합니다.id들판.

아래 예제에서는 새 사용자를 생성할 때 생성자에서와 같이 매개 변수를 전달합니다.룸에서 ID를 자동 생성합니다.모든 사용자 개체 ID가 ID 설정기에서 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;
    }

}

아래 코드로 엔터티 클래스에 주석을 추가합니다.

Java의 경우:

@PrimaryKey(autoGenerate = true)
private int id;

코틀린에서:

@PrimaryKey(autoGenerate = true)
var id: Int

그러면 회의실은 ID 필드를 자동으로 생성하고 자동으로 증가시킵니다.

언급URL : https://stackoverflow.com/questions/44109700/how-to-make-primary-key-as-autoincrement-for-room-persistence-lib

반응형