룸 데이터 베이스를 쓰다보면 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의 데이터베이스 데이터값이 순서가 변경된다면, 데이터 베이스 규칙에 위배되는 행위이다. 따라서 정렬 기준을 새로 만들어 주는 것이다!
더 생각해볼 것
주소 값과 참조 값의 차이
'개발노트 > Kotlin' 카테고리의 다른 글
코틀린 코루틴 - 1장 (0) | 2024.03.27 |
---|---|
파이널 프로잭트 4주차 2일 코루틴 (0) | 2023.10.31 |
파이널 프로젝트 3주차 2일 swith map (0) | 2023.10.24 |
파이널 프로젝트 2주차 5일 (0) | 2023.10.20 |
파이널 프로젝트 2주차 4일 (0) | 2023.10.19 |