Room автоматически сортирует на основе первичного ключа в Android

#android #sqlite #kotlin #android-room

#Android #sqlite #kotlin #android-room

Вопрос:

У меня есть класс данных, подобный этому

 @Entity
data class Question(

        @field:SerializedName("question")
        var question: String? = null,

        @field:SerializedName("answers")
        var answers: ArrayList<String?>? = null,

        @field:SerializedName("id")
        @PrimaryKey
        var id: Int? = null
)
  

Затем в DAO у меня есть методы сохранения и получения, подобные этому

     @Dao
interface QnADao {

    @Insert(onConflict = OnConflictStrategy.REPLACE)
    fun saveQuestion(questions:Question)

    @Insert(onConflict = OnConflictStrategy.REPLACE)
    fun saveAllQuestions(questions: List<Question?>?)


    @Query("SELECT * from Question")
    fun getAllQnA():List<Question>


}
  

Я сохраняю список Questions , а затем позже извлекаю их. Поэтому всякий раз, когда я извлекаю их, я получаю список, отсортированный в соответствии с id , который является первичным ключом.

Итак, если я сохраняю вопросы с помощью id:254 , id:23 , id:45 и id:92 тогда я получаю это следующим образом id:23 , id:45 id:92 и id:254

Но мне не нужен подобный отсортированный список, мне нужно получить данные в том виде, в каком они были сохранены в базе данных. Буду признателен за любую помощь. Спасибо.

Комментарии:

1. Вы нашли какое-либо решение, кроме добавления другого столбца в качестве даты?

Ответ №1:

Попробуйте использовать AutoGenerate = true для первичного ключа, чтобы создать номер PK в последовательности

Смотрите строки ниже

 @PrimaryKey(autoGenerate = true)
  

Так что теперь ваш порядок вставки и повторного поиска будет таким же

Ответ №2:

Вы можете добавить Date поле к вашему объекту вопроса

 @field:SerializedName("date")
var date: Date? = null,
  

и упорядочивайте свои объекты по дате

 @Query("SELECT * FROM Question ORDER BY date DESC")