在Room中创建Generic DAO接口时,“参数的类型必须是使用@Entity注释的类”
我正在使用Room架构组件来实现持久性。 我已经创建了通用DAO接口以避免样板代码。 Room Pro Tips
但是我的代码没有编译说错误:(21,19)错误:参数的类型必须是用@Entity或它的集合/数组注释的类。“ 对于通用类T.
interface BaseDao { @Insert(onConflict = OnConflictStrategy.REPLACE) void insert(T... entity); @Update void update(T entity); @Delete void delete(T entity); } @Dao public abstract class ReasonDao implements BaseDao { @Query("SELECT * from Reason") abstract public List getReasons(); }
这里有什么我想念的吗? 它就像这样工作
我最初遵循Kotlin中使用的方法,但这给出了Java代码中的错误。 两个快速修改为我修复了它
- 将BaseDao更改为Abstract类
- 将@Dao注释添加到BaseDao
请找到下面的代码,现在它运行正常
@Dao abstract class BaseDao { @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{ @Query("SELECT * from Reason") abstract public List getReasons(); }
在我的情况下,我试图保存到DB非实体对象。 然后替换为Entity类(包含@Entity(tableName = "your_table", indices = [Index("your_key")])
)。
我相信你错过了给T类的Entity
注释。 例如, Reason
类应该具有@Entity
并将其提供给ReasonDao类。 喜欢:
@Dao public abstract class ReasonDao extends BaseDao