我的枚举类型为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?
答案 0 :(得分:0)
没有房间
最好的办法是使用默认参数并像
那样编写函数@Query("SELECT * FROM Tag WHERE state =:tagState LIMIT 1")
suspend fun firstInactiveOrNull(tagState: Int?=TagState.INACTIVE): TagEntity?
现在,如果您调用函数firstInactiveOrNull()
,则默认情况下它将提供无效标签,但如果您调用firstInactiveOrNull(TagState.ACTIVE)
,则将提供有效标签。所以只要您不传递参数就可以了