エラー発生の経緯
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系に下げるのが良いと思います。