web-dev-qa-db-ja.com

部屋:@Transactionの使用時にエラーを受信する

DAOクラスに@Transactionアノテーションが付けられたメソッドがあり、次のエラーが発生しています。

DAOメソッドには、挿入、削除、クエリ、更新のいずれか1つだけで注釈を付けることができます。

これが私のクラスです:

@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アノテーションが付けられたメソッドを削除すると、正常にコンパイルされます。これを修正する方法はありますか?

15
Marcola Carr

トランザクションドキュメント によると

abstract 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)
    }

}
27
Marcola