Room会根据Android中的主键自动排序

时间:2019-03-14 05:09:46

标签: 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:254id:23id:45id:92的问题,那么我会像这样id:23,{{1} },id:45id:92

但是我不需要像这样的排序列表,我需要获取保存在数据库中的数据。任何帮助,将不胜感激。谢谢。

2 个答案:

答案 0 :(得分:1)

尝试对主键使用autoGenerate = true,以便它将按顺序创建PK号

请参见下面的行

@PrimaryKey(autoGenerate = true)

现在您的插入和检索顺序将相同

答案 1 :(得分:1)

您可以将Date字段添加到问题实体

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

并按日期对实体进行排序

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