首页 > 解决方案 > 如何在@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 中使用枚举值?更重要的是,该值将在编译时评估?

标签: androidenumsandroid-room

解决方案


您可以像任何类型一样轻松使用它,并且房间会将其作为字符串值处理

@Query("SELECT * FROM items WHERE status = :status")
Item getAllApprovedItems(Status status);

推荐阅读