I am using Room architecture component for persistence. I have created generic DAO interface to avoid boilerplate code. Room Pro Tips
But my code doesn\'t compile s
I had initially followed the method used in Kotlin, but that gives the error in Java code. Two quick changes fixed it for me
Please find the code below and now it runs properly
@Dao
abstract class BaseDao<T> {
@Insert(onConflict = OnConflictStrategy.REPLACE)
abstract void insert(T entity);
@Update
abstract void update(T entity);
@Delete
abstract void delete(T entity);
}
@Dao
public abstract class ReasonDao extends BaseDao<Reason>{
@Query("SELECT * from Reason")
abstract public List<Reason> getReasons();
}
I believe is that you have missed to give Entity
annotation to T class. For example Reason
class should have @Entity
and give it to ReasonDao class. Like:
@Dao
public abstract class ReasonDao extends BaseDao<Reason>{}
The reason is that you specified ReasonDao type as generic parameter instead of Reason.
Original code:
@Dao
public abstract class ReasonDao implements BaseDao<ReasonDao> {
...
}
Correct code:
@Dao
public abstract class ReasonDao implements BaseDao<Reason> {
...
}
where Reason is the type marked with @Entity annotation.
By the way, this is fixed in the accepted answer, but is not mentioned in the changelist :)
In my case I tried to save to DB non-Entity objects. Then replaced with Entity class (contains @Entity(tableName = "your_table", indices = [Index("your_key")])
).