房间错误:参数的类型必须是用@Entity 或它的集合/数组注释的类

Zor*_*gan 4 android kotlin android-room

我收到以下错误:

error: Type of the parameter must be a class annotated with @Entity or a collection/array of it.
    java.lang.String matchId);
Run Code Online (Sandbox Code Playgroud)

在我的matchedBefore()查询中:

@Dao
interface MatchedUsersDao {

    // Checks to see if user has matched before (if it returns 1)
    @Query("SELECT COUNT(*) FROM matched_users WHERE :matchId = match_id LIMIT 1")
    fun matchedBefore(matchId: String): Int

    @Insert(onConflict = OnConflictStrategy.ABORT)
    fun addMatchUid(matchId: String)
}
Run Code Online (Sandbox Code Playgroud)

这是我的实体

@Entity(tableName = "matched_users")
data class MatchedUser(
    @PrimaryKey(autoGenerate = true) val id: Int,
    @ColumnInfo(name = "match_id") val matchId: String
)
Run Code Online (Sandbox Code Playgroud)

D B

@Database(entities = arrayOf(MatchedUser::class), version = 1)
abstract class AppDatabase : RoomDatabase() {

    abstract fun matchedUsersDao(): MatchedUsersDao
}
Run Code Online (Sandbox Code Playgroud)

我在我的应用程序中实例化我的数据库:

class CustomApplication : Application() {

    companion object {
        var database: AppDatabase? = null
    }

    override fun onCreate() {
        super.onCreate()
        CustomApplication.database = Room.databaseBuilder(this, AppDatabase::class.java, "AppDatabase").build()
    }
Run Code Online (Sandbox Code Playgroud)

有人可以告诉我错误指示什么以及我如何解决它?

Rad*_*esh 5

你的问题是这条线

@Insert(onConflict = OnConflictStrategy.ABORT)
fun addMatchUid(matchId: String)
Run Code Online (Sandbox Code Playgroud)

如果你想使用@Insert注释,你必须发送实例MatchedUser非字符串的。

这样你就可以 :

1)MatchedUser用你的id发送新的(插入空MatchedUser

你的代码一定是这样的

@Insert(onConflict = OnConflictStrategy.ABORT)
fun addMatchUid(matchUser: MatchedUser)
Run Code Online (Sandbox Code Playgroud)

2)@Query为仅在 db 中插入 id编写新的