Query method parameters should either be a type that can be converted into a database column or a List

1. 문제

Android Studio에서 앱을 빌드할 때 Query method parameters should either be a type that can be converted into a database column or a List~ 에러로 컴파일이 실패하였습니다.

에러 출력 내용

../app/build/tmp/kapt3/stubs/debug/com/example/memorynotes/framework/db/NoteDao.java:18:
error: Query method parameters should either be a type that can be converted into a database column or
a List / Array contains such type. You can consider adding a Type Adapter for this.
    kotlin.coroutines.Continuation<? super com.example.memorynotes.framework.db.NoteEntity> continuation);
                                                                                            ^

컴파일 에러가 발생한 곳은 Room의 DAO인데, 문법적인 측면에서 코드가 잘못된 부분은 없는 것 같습니다.

@Dao
interface NoteDao {
    @Insert(onConflict = REPLACE)
    suspend fun addNoteEntity(noteEntity: NoteEntity)

    @Query("SELECT * FROM note WHERE id = :id")
    suspend fun getNoteEntity(id: Long): NoteEntity?

    @Query("SELECT * FROM note")
    suspend fun getAllNoteEntities(): List<NoteEntity>

    @Delete
    suspend fun deleteNoteEntity(noteEntity: NoteEntity)
}

2. 해결 : 최신 버전으로 변경

문제 원인은 프로젝트의 Gradle에 선언한 Room 2.2.2 버전이 다른 의존성과 충돌이 발생하여 에러가 발생된 것 같았습니다.

dependencies {
    implementation "androidx.room:room-runtime:2.2.2"
    kapt "androidx.room:room-compiler:2.2.2"
    implementation "androidx.room:room-ktx:2.2.2"

아래와 같이 현재 최신 버전인 2.4.1 버전으로 변경했더니 빌드가 성공하였습니다.

dependencies {
    implementation "androidx.room:room-runtime:2.4.1"
    kapt "androidx.room:room-compiler:2.4.1"
    implementation "androidx.room:room-ktx:2.4.1"

References

Loading script...
codechachaCopyright ©2019 codechacha