使用@RawQuery时删除时未触发房间流

问题描述 投票:0回答:1

我正在监听本地数据库中的更改

@Query("SELECT * FROM favorite_recipes_table ORDER BY id ASC")
fun readFavoriteRecipesAsFlow(): Flow<List<FavoriteEntity>>

但是当我在 DAO 中运行另一个方法来删除同一个表中的项目时:

@RawQuery
suspend fun deleteFavoritesRecipe(query: SupportSQLiteQuery): Int

readFavoriteRecipesAsFlow
返回的流未被调用。可能是什么问题?

android kotlin android-room androidx
1个回答
0
投票

发生这种情况是因为使用了

@RawQuery

根据此问题:https://issuetracker.google.com/issues/235373409

示例项目中的删除函数实际上使用 @RawQuery 方法,该方法没有有关正在执行的操作类型的信息,因此不知道它是写入。这会导致交易无法运行,这意味着失效永远不会开始

解决方法是在查询方法中添加

@Transaction

@RawQuery
@Transaction
suspend fun deleteFavoritesRecipe(query: SupportSQLiteQuery): Int

或者您可以重新考虑如何使用简单的注释进行此查询,例如

@Query
@Delete

https://issuetracker.google.com/issues/235878346
上提出了一个问题,请求此功能在使用 @RawQuery 时通知更改,但过去 2 年没有进行任何更新。

© www.soinside.com 2019 - 2024. All rights reserved.