【问题标题】:How to use enum on WHERE clause inside a @Query - Android Room如何在@Query 中的 WHERE 子句上使用枚举 - Android Room
【发布时间】:2021-09-13 22:41:58
【问题描述】:

从 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 中使用枚举值? 更重要的是,该值将在编译时评估?

【问题讨论】:

    标签: android enums android-room


    【解决方案1】:

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

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

    【讨论】:

    • 感谢您的提示,但是使用这种方法,该方法变得通用,而不是像它的名字所说的那样(获取所有已批准的项目),因此用户应该调用另一个封装此 DAO 的方法,在不同的班级。我试图避免这种情况。
    • 我猜这是在 WHERE 子句中使用枚举的唯一方法?
    猜你喜欢
    • 2013-07-19
    • 1970-01-01
    • 1970-01-01
    • 2011-03-29
    • 1970-01-01
    • 2013-12-18
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多