在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{}