在会议室查询中转换枚举

时间:2019-09-05 12:39:41

标签: android kotlin android-room

我的枚举类型为TagState,工作类型为TypeConverter;我希望枚举在@Query内部进行转换,而不必作为函数的参数。

我只对firstInactiveOrNull()感兴趣。这有效:

@Query("SELECT * FROM Tag WHERE state == :state LIMIT 1")
abstract suspend fun firstOrNull(state: TagState): TagEntity?

@Query("SELECT * FROM Tag WHERE state == 0 LIMIT 1")
suspend fun firstInactiveOrNull() = firstOrNull(TagState.INACTIVE)

但是为了清楚起见和获得知识,我想摆脱firstOrNull()并拥有一个单独的功能firstInactiveOrNull()

由于我知道TagState.INACTIVE是第一项,因此可能的解决方案是:

@Query("SELECT * FROM Tag WHERE state == 0 LIMIT 1")
abstract suspend fun firstInactiveOrNull(): TagEntity?

但是-对我来说-还不够强大。

是否可以让Room通过这样的查询生成函数:

@Query("SELECT * FROM Tag WHERE state == {TagState.INACTIVE} LIMIT 1")
abstract suspend fun firstInactiveOrNull(): TagEntity?

1 个答案:

答案 0 :(得分:0)

没有房间

最好的办法是使用默认参数并像

那样编写函数
@Query("SELECT * FROM Tag WHERE state =:tagState LIMIT 1")
suspend fun firstInactiveOrNull(tagState: Int?=TagState.INACTIVE): TagEntity?

现在,如果您调用函数firstInactiveOrNull(),则默认情况下它将提供无效标签,但如果您调用firstInactiveOrNull(TagState.ACTIVE),则将提供有效标签。所以只要您不传递参数就可以了