Room:使用@Transaction时收到错误

时间:2017-10-13 12:39:42

标签: android kotlin android-room

我的DAO类中有一个使用@Transaction注释的方法,这会导致以下错误:

  

DAO方法只能使用以下方法之一进行注释:插入,删除,查询,更新

这是我的班级:

@Dao interface Dao {

    @Insert(onConflict = REPLACE) fun insertList(chacaras: List<String>)

    @Query("SELECT * FROM chacara WHERE cityId = :cityId")
    fun getListOfCity(cityId: String): LiveData<List<String>>

    @Delete fun deleteList(chacaraList: List<String>)

    @Transaction
    fun updateList(list: List<String>){
        deleteList(list)
        insertList(list)
    }

}

当我删除使用@Transaction注释的方法时,它会正常编译。 无论如何要解决这个问题吗?

1 个答案:

答案 0 :(得分:23)

根据transaction documentation

  

抽象Dao类中的方法标记为事务方法。

将您的课程更改为:

@Dao abstract class Dao {

    @Insert(onConflict = REPLACE) abstract fun insertList(chacaras: List<String>)

    @Query("SELECT * FROM chacara WHERE cityId = :cityId")
    abstract fun getListOfCity(cityId: String): LiveData<List<String>>

    @Delete abstract fun deleteList(chacaraList: List<String>)

    @Transaction
    open fun updateList(list: List<String>){
        deleteList(list)
        insertList(list)
    }

}