【问题标题】: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。