会议室数据库插入错误:参数的类型必须是带有@Entity的类或其集合/数组

时间:2018-11-11 20:03:52

标签: android sqlite kotlin android-room

我正在使用1.0.0版的Room数据库,并创建了这个BaseDao:

abstract class BaseDao<in T : BaseDataObject> {


@Insert(onConflict = OnConflictStrategy.REPLACE)
abstract fun insert(entity: T): Long

@Insert(onConflict = OnConflictStrategy.REPLACE)
abstract fun insert(vararg entity: T): List<Long>

@Insert(onConflict = OnConflictStrategy.REPLACE)
abstract fun insert(entityList: List<T>): List<Long>

@Update
abstract fun update(entity: T): Int

@Update
abstract fun update(vararg entity: T): Int


@Delete
abstract fun delete(entity: T): Int

@Delete
abstract fun delete(vararg entity: T): Int

}

所有这些方法,除了一种方法效果很好,问题是-带有entityList : List<T>参数的方法导致错误Type of the parameter must be a class annotated with @Entity or a collection/array of it. java.util.List<? extends T> entityList);。但是我正在从子类中使用此方法,并且我肯定使用@Entity注释了实体类。

子类:

@Dao
abstract class ArticleDAO : BaseDao<Article>() {

}

实体类:

@Entity(tableName = "table_article", foreignKeys = arrayOf(
        ForeignKey(
                entity = NewsList::class,
                parentColumns = arrayOf("id"),
                childColumns = arrayOf("newsListId")))
)
class Article : BaseDataObject() {


    @Embedded(prefix = "source_")
    var source: Source? = null

   //...

}

我认为问题可能出在Kotlin正在翻译的Java代码中,因为在Java代码中,所有其他方法的参数都具有类型T,但是损坏的参数具有List<? extends T>,因此我认为问题出在通配符上,但我不知道如何处理。

0 个答案:

没有答案