如何在 Room @Query 中使用参数字段?
How to use parameter fields in Room @Query?
我有一个 User
class 和一个字段 id
,所以我想 运行 对 Room 进行以下查询:
@Query("SELECT * FROM ticket where user_id = :user.id")
LiveData<Ticket> loadFromUser(User user);
但是我在 user.id
上的 Android Studio 上收到错误标记,我在网上找到的所有示例都只使用 @Query
方法的直接参数,通常是 String
或 int
.
是否可以在房间中使用对象的字段@Query
?如果是肯定的,那么引用它的正确方法是什么。
您不能将这样的参数传递给房间。它不支持完整的表达式语言。您必须使用原始类型来传递参数。像这样,
@Query("SELECT * FROM ticket where user_id = :user_id")
LiveData<Ticket> loadFromUser(String user_id);
在我的例子中我使用了@RawQuery
在 DAO 中你可以写
@RawQuery
LiveData<Ticket> loadFromUser(SupportSQLiteQuery query);
并创建您的查询并传递给它。
SimpleSQLiteQuery query = new SimpleSQLiteQuery("SELECT * FROM ticket where user_id = ?") , new Object[]{user.id})
并将此 query
传递给 DAO 方法。
userDao.loadFromUser(query)
一个简单的解决方案是创建另外两个函数,一个用于 user_id
,一个用于 user
,如下所示:
@Query("SELECT * FROM ticket where user_id = :user_id")
LiveData<Ticket> loadFromUser(String user_id);
@Transaction
LiveData<Ticket> loadFromUser(User user){
return loadFromUser(user.id);
}
我有一个 User
class 和一个字段 id
,所以我想 运行 对 Room 进行以下查询:
@Query("SELECT * FROM ticket where user_id = :user.id")
LiveData<Ticket> loadFromUser(User user);
但是我在 user.id
上的 Android Studio 上收到错误标记,我在网上找到的所有示例都只使用 @Query
方法的直接参数,通常是 String
或 int
.
是否可以在房间中使用对象的字段@Query
?如果是肯定的,那么引用它的正确方法是什么。
您不能将这样的参数传递给房间。它不支持完整的表达式语言。您必须使用原始类型来传递参数。像这样,
@Query("SELECT * FROM ticket where user_id = :user_id")
LiveData<Ticket> loadFromUser(String user_id);
在我的例子中我使用了@RawQuery
在 DAO 中你可以写
@RawQuery
LiveData<Ticket> loadFromUser(SupportSQLiteQuery query);
并创建您的查询并传递给它。
SimpleSQLiteQuery query = new SimpleSQLiteQuery("SELECT * FROM ticket where user_id = ?") , new Object[]{user.id})
并将此 query
传递给 DAO 方法。
userDao.loadFromUser(query)
一个简单的解决方案是创建另外两个函数,一个用于 user_id
,一个用于 user
,如下所示:
@Query("SELECT * FROM ticket where user_id = :user_id")
LiveData<Ticket> loadFromUser(String user_id);
@Transaction
LiveData<Ticket> loadFromUser(User user){
return loadFromUser(user.id);
}