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
相关产品推荐
相关产品推荐

