android - 如何在@Query 中的 WHERE 子句上使用枚举 - Android Room
问题描述
从 Android Room 2.3.0 开始,我们可以在 @Entity 类上使用枚举字段,而无需为其编写 @TypeConverter。但是如何在@Query 中使用这些值呢?
假设我们需要列出所有“已批准”的项目:
@Entity(tableName = "items")
public class Item {
//...
public Status status;
//...
}
public enum Status {
APPROVED,
DENIED
}
@Dao
public interface ItemDao {
//...
@Query("SELECT * FROM items WHERE status = ???????")
List<Item> getAllApprovedItems();
//...
}
当然,我可以为我的枚举设置一个值,并为它创建一个类型转换器,如下所示:
APPROVED(1),
DENIED(2)
然后进行查询
@Query("SELECT * FROM items WHERE status = 1")
但我认为这很容易出错。
有没有办法在@Query 中使用枚举值?更重要的是,该值将在编译时评估?
解决方案
您可以像任何类型一样轻松使用它,并且房间会将其作为字符串值处理
@Query("SELECT * FROM items WHERE status = :status")
Item getAllApprovedItems(Status status);
推荐阅读
- c# - 如何在不重复的情况下拆分 WCF 合同?
- typescript - 如何从列表对象中获取选定项目的索引
- delphi - Delphi 10.2 中对 MemoryStream 的写入发生了怎样的变化?
- angular - Angular 服务请求分页集合
- xml - web.debug.config 转换插入不会插入到 web.config
- css - 背景图像在生产中的 rails style.css 中不起作用
- javascript - Selenium 跟随链接后获取元素
- sql - 文本中任意位置带有两个通配符的 SQL
- scala - Scala Play REST API 测试与外部服务器
- php - 从表中获取关联数组中元素的值