Комната Дао наследство - PullRequest
       17

Комната Дао наследство

0 голосов
/ 22 февраля 2020

Возможно ли иметь Дао без аннотированного метода? И переопределить его в производных классах?

interface DaoBase<TEntity, TId> where TEntity : Entity<TId> {

    @Insert
    fun add(entity: TEntity)

    fun get(id: TId): TEntity?

    @Update
    fun update(entity: TEntity)
}

fun <TEntity, TId> DaoBase<TEntity, TId>.addOrUpdate(entity: TEntity) where TEntity : Entity<TId> {
    val entityQ = get(entity.id)
    if(entityQ == null) {
        add(entity)
    } else {
        update(entity)
    }
}

Я получаю эту ошибку для объекта DaoBase:

DaoBase.java:13: error: An abstract DAO method must be annotated with one and only one of the following annotations: Insert,Delete,Query,Update,RawQuery
    public abstract TEntity get(TId id);

И ту же ошибку на любом Дао, который наследуется от него. Я думаю, что код, который генерирует код, может иметь ошибку?

1 Ответ

0 голосов
/ 25 февраля 2020

добавить @Query выше get

@Query("SELECT * FROM tableName WHERE id=:id")  
fun get(id: TId): TEntity?

Также вы можете go добавить вашу функцию addOrUpdate и вашу функцию обновления

@Insert(onConflict = OnConflictStrategy.REPLACE)
fun add(entity: TEntity)

, которая совпадает с обновлением

...