【问题标题】:create a custom function with body in dao room database在 dao room 数据库中创建一个带有 body 的自定义函数
【发布时间】:2018-12-29 09:49:58
【问题描述】:

我想用这样的自定义函数创建一个 DAO 对象

@Dao
interface DataAccessObjDao{
    @Insert
    fun insert(someEntity: SomeEntity)

    @Ignore
    fun sampleFun(){
        insert(SumEntity())
    }

}

但是编译器抱怨样本很有趣

类“DataAccessObjDao_Impl”必须声明为抽象或在“DataAccessObjDao”中实现抽象方法“sampleFun()”

【问题讨论】:

  • 是的,它一定是,实际上它不是我原来的实现

标签: android dao android-room


【解决方案1】:

@Ignore 用于属性或实体,不能用于方法。
你可以通过扩展你的界面来做到这一点:

fun DataAccessObjDao.sampleFun(){
    // irrelevant code
}

或添加@Transaction

@Transaction
fun sampleFun(){
    firstDelete()
    thenInsert()
}

【讨论】:

    【解决方案2】:

    正如您所写,Dao 也可以是抽象类。您可以在抽象类中定义带有主体的方法。但是 Dao 是用于查询表的,并且对于不同的表有不同的 Dao 对象。如果他们只有插入、删除、更新和选择查询会更好。我也用 BaseDao 来最小化 Dao 代码。

    您应该在使用 Repository 的 LocalDataSource 类中调用 dao.insert(SumEntity()),如 this guide

    【讨论】:

      猜你喜欢
      • 2019-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-24
      • 2018-02-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多