You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Room数据库@Insert报错:参数需为@Entity注解类或其集合

Room数据库插入操作报错排查

报错信息

error: Type of the parameter must be a class annotated with @Entity or a collection/array of it.
    java.lang.String tocd);
                     ^

我正在开发一款常规Room应用,尝试将数据存入本地Room数据库时出现上述报错。我已经尝试过降级Kotlin版本、升级Room版本等方案,但都没有解决问题。以下是我的相关代码和配置:

LocalDatabase类代码

@Database(entities = [SessionData::class], version = 1, exportSchema = true)
abstract class LocalDatabase : RoomDatabase() {

    abstract fun dao(): CepsaDAO

}

实体数据类代码

@Entity(tableName = Constants.DB_NAME)
data class SessionData (
    @PrimaryKey(autoGenerate = false) val tcod: String,
    @ColumnInfo(name = "sessionToken") val sessionToken: String,
)

DAO接口代码

@Dao
interface CepsaDAO {
    @Insert(onConflict = OnConflictStrategy.REPLACE)
    fun insertTocd(tocd: String):Long   //此方法触发报错 

    @Query("SELECT tcod FROM ${Constants.DB_NAME}")
    fun getTocd():String?

    @Query("SELECT sessionToken FROM ${Constants.DB_NAME} WHERE tcod=:tocd")
    fun getSessionData(tocd:String): String?

    @Query("DELETE FROM ${Constants.DB_NAME} WHERE sessionToken=:token")
    fun deleteSessionId(token: String):Int
}

Dagger Hilt实例化代码

@InstallIn(SingletonComponent::class)
@Module
class LocalModule {

    @Provides
    @Singleton
    fun provideDB(@ApplicationContext context: Context): LocalDatabase {
        return Room.databaseBuilder(
            context.applicationContext,
            LocalDatabase::class.java,
            Constants.DB_NAME
        ).build()
    }
}

@ActivityRetainedScoped
class LocalDatabaseUseCase @Inject constructor(@ApplicationContext val context: Context) {

    @Inject
    lateinit var db : LocalDatabase

... Some code
}

app模块build.gradle配置

plugins {
    id 'com.android.application'
    id 'org.jetbrains.kotlin.android'
    id 'kotlin-kapt'
    id 'dagger.hilt.android.plugin'
    id 'org.jetbrains.kotlin.plugin.serialization'
}

dependencies{

kotlin_version=1.8.10
kotlin_serialization=1.5.0
core_ktx_version=1.10.1
room_version=2.5.0

implementation "androidx.core:core-ktx:$core_ktx_version"
    implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.6.1'
    implementation 'androidx.activity:activity-compose:1.7.2'
    implementation platform('androidx.compose:compose-bom:2022.10.00')
    implementation 'androidx.compose.ui:ui'
    implementation 'androidx.compose.ui:ui-graphics'
    implementation 'androidx.compose.ui:ui-tooling-preview'
    implementation 'androidx.compose.material3:material3'
    implementation "org.jetbrains.kotlinx:kotlinx-serialization-json:$kotlin_serialization"

//Room libraries
    implementation "androidx.room:room-runtime:$room_version"
    kapt "androidx.room:room-compiler:$room_version"

    // To use Kotlin annotation processing tool (kapt)
    implementation "androidx.room:room-ktx:$room_version"
}

请问我忽略了什么问题?


内容的提问来源于stack exchange,提问作者Manuel Lucas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 02:10:55