Webエンジニアのメモ帳

技術的な話を中心に書いています。

【Room】エラー対応 DELETE query methods must either return void or int (the number of deleted rows).

エラー発生の経緯

Roomを使ったAndroidアプリにおいて、Daoクラスの以下のメソッドをsuspend関数に変更しました。

@Dao
interface UserDao {
    @Query("DELETE FROM user WHERE id = :id")
    fun deleteById(id: Int)
}

すると、以下のようなエラーが発生しました。

DELETE query methods must either return void or int (the number of deleted rows).

単純にエラーを読むと、deleteByIdの返り値をvoidかintにすれば良いようです。

しかし、すでに返り値はvoidですし、intに変えてみても状況は変わりませんでした。

解決方法

調べたところ、このエラーはKotlinのバージョンが1.7系、Roomのバージョンが2.4系だと発生するようでした。

そこで、私の場合はRoomのバージョンを2.5.2に変えることで解決しました。(build.gradleを以下のように変更)

dependencies {
    implementation 'androidx.room:room-runtime:2.5.2'
    implementation 'androidx.room:room-ktx:2.5.2'
    kapt 'androidx.room:room-compiler:2.5.2'
}

ただし、Roomのバージョンを2.5.2に上げるのであれば、targetSdkの変更も必要になります。

これを避けたいのであれば、Kotlinのバージョンを1.6系に下げるのが良いと思います。

参考

issuetracker.google.com