在 Room 中使用成员变量进行查询
using member variable for query in Room
我想更新这个 Recipe 对象的 recipeName
@Entity
data class Recipe(
@PrimaryKey
val recipeName: String,
val image: String?
)
所以我尝试执行自定义查询,但是 android 工作室抱怨我需要在 where 子句之前使用 Indexed、Not 或 Set
@Query("UPDATE Recipe WHERE recipeName = :oldName ")
suspend fun update(recipe: Recipe, oldName: String)
所以我尝试这样做,问题是我不知道如何通过函数中的食谱对象参数访问食谱名称,以便我可以在查询中使用它。我什至不知道这是否可能。
@Query("UPDATE Recipe SET recipeName = :recipe.recipeName WHERE recipeName = :oldName ")
suspend fun update(recipe: Recipe, oldName: String)
只是为了澄清这是行不通的,但这就是我想要实现的目标 -> recipe.recipeName
当然,我可以只传入新名称而不是整个食谱对象,这样就可以解决这个问题,但是我必须传入我的食谱实体的每个变量,如果它可能会失控长得太多所以如果我有选择我宁愿不...
考虑下一种方式:
- 更改
Recipe
结构 - 添加自动生成的 id
(Int) 作为主键,recipeName
将是普通字段。
- 要首先在您的代码中更改您的
Recipe
,您应该获取以前版本的 Recipe
对象(如果您还没有):
@Query("SELECT * from Recipe WHERE recipeName = :oldName")
suspend fun getRecipeByName(oldName: String): Recipe?
然后您可以更改任何您想要的字段(name
等等)并使用
保存更改
@Update
suspend fun updateRecipe(recipe: Recipe)
你可以这样做,因为对象的 id
不会改变
我想更新这个 Recipe 对象的 recipeName
@Entity
data class Recipe(
@PrimaryKey
val recipeName: String,
val image: String?
)
所以我尝试执行自定义查询,但是 android 工作室抱怨我需要在 where 子句之前使用 Indexed、Not 或 Set
@Query("UPDATE Recipe WHERE recipeName = :oldName ")
suspend fun update(recipe: Recipe, oldName: String)
所以我尝试这样做,问题是我不知道如何通过函数中的食谱对象参数访问食谱名称,以便我可以在查询中使用它。我什至不知道这是否可能。
@Query("UPDATE Recipe SET recipeName = :recipe.recipeName WHERE recipeName = :oldName ")
suspend fun update(recipe: Recipe, oldName: String)
只是为了澄清这是行不通的,但这就是我想要实现的目标 -> recipe.recipeName
当然,我可以只传入新名称而不是整个食谱对象,这样就可以解决这个问题,但是我必须传入我的食谱实体的每个变量,如果它可能会失控长得太多所以如果我有选择我宁愿不...
考虑下一种方式:
- 更改
Recipe
结构 - 添加自动生成的id
(Int) 作为主键,recipeName
将是普通字段。 - 要首先在您的代码中更改您的
Recipe
,您应该获取以前版本的Recipe
对象(如果您还没有):
@Query("SELECT * from Recipe WHERE recipeName = :oldName")
suspend fun getRecipeByName(oldName: String): Recipe?
然后您可以更改任何您想要的字段(name
等等)并使用
@Update
suspend fun updateRecipe(recipe: Recipe)
你可以这样做,因为对象的 id
不会改变