본문 바로가기
개발노트/Kotlin

room db primarykey에 대해

by 시계속세상은아직돌아가는중 2023. 10. 30.

룸 데이터 베이스를 쓰다보면 entitiy에

@PrimaryKey(autoGenerate = true)
@ColumnInfo(name = "entry_id")
val id: Long = 0,

이런 식으로 autoGenerate를 해주는 경우가 있다.

 

이런 경우에 문제가 발생하는데, 바로 room db에서는 autoGenerate로 결정해준 넘버를 기준으로 알아서 재정렬을 해준다는 것이다.

 

즉 아무리 순서가 바뀐 데이터를 삽입해도

해당 primarykey값이 숫자로 되어있으면 얄짤없이 정렬을 해버리는 것이다.

 

그렇다면 어떻게 해야할까?

바로 Query문의 조정이 필요하다.

@Entity(tableName = "tag_table")
data class TagEntity(
    @PrimaryKey(autoGenerate = true)
    @ColumnInfo(name = "tag_id")
    val id: Long,
    @ColumnInfo(name = "tag_key")
    val key: String,
    @ColumnInfo(name = "tag_img")
    val img: Int = 0,
    @ColumnInfo(name = "tag_title")
    val title: String,
    @ColumnInfo(name = "tag_order")
    val order: Int = 0
)
@Query("SELECT * FROM tag_table WHERE tag_key = :key ORDER BY tag_order asc")
fun getLiveTagByKey(key: String): LiveData<List<TagEntity>> //템플릿 선택 시 반환되는 데이터

entity에 정렬 기준을 새로 새워서 반환을 해주는 것 이다!

 

id값은 고유성이 있어야 하며 room의 데이터베이스 데이터값이 순서가 변경된다면, 데이터 베이스 규칙에 위배되는 행위이다. 따라서 정렬 기준을 새로 만들어 주는 것이다!

 

더 생각해볼 것

 

주소 값과 참조 값의 차이