Ошибка вставки базы данных помещения: типом параметра должен быть класс, аннотированный @Entity, или его коллекция / массив - PullRequest
0 голосов
/ 11 ноября 2018

Я использую базу данных Room версии 1.0.0, и я создал этот 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

   //...

}

Я думаю, что проблема может быть в коде Java, в который Котлин переводит, потому что в коде Java все параметры другого метода имеют тип T, но у сломанного есть List<? extends T>, поэтому я думаю, что проблема в том, в шаблоне, но я не знаю, как с этим справиться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...