Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何在Room@Query中使用参数字段?_Android_Android Room - Fatal编程技术网

Android 如何在Room@Query中使用参数字段?

Android 如何在Room@Query中使用参数字段?,android,android-room,Android,Android Room,我有一个User类,它有一个字段id,所以我想用Room运行以下查询: @Query("SELECT * FROM ticket where user_id = :user.id") LiveData<Ticket> loadFromUser(User user); @Query(“从用户id=:user.id的票证中选择*) LiveData loadFromUser(用户用户); 但是我在Android Studio上的user.id上得到了错误标记,我在网上找到的所有示例都

我有一个
User
类,它有一个字段
id
,所以我想用Room运行以下查询:

@Query("SELECT * FROM ticket where user_id = :user.id")
LiveData<Ticket> loadFromUser(User user);
@Query(“从用户id=:user.id的票证中选择*)
LiveData loadFromUser(用户用户);
但是我在Android Studio上的
user.id
上得到了错误标记,我在网上找到的所有示例都只使用
@Query
方法的直接参数,通常是
字符串或
int


是否可以使用房间中的对象字段
@Query
?如果为正,那么引用它的正确方式是什么。

您不能将这样的参数传递给房间。它不支持完整表达式语言。必须使用基元类型来传递参数。像这样,

@Query("SELECT * FROM ticket where user_id = :user_id")
LiveData<Ticket> loadFromUser(String user_id);
@Query(“从用户\u id=:用户\u id的票证中选择*)
LiveData loadFromUser(字符串用户id);

在我的例子中,我使用了
@RawQuery

用刀你可以写

@RawQuery
LiveData<Ticket> loadFromUser(SupportSQLiteQuery query);
并将此
查询
传递给DAO方法

userDao.loadFromUser(query)

一个简单的解决方案是创建另外两个函数,一个用于
user\u 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);
}
@Query(“从用户\u id=:用户\u id的票证中选择*)
LiveData loadFromUser(字符串用户id);
@交易
LiveData loadFromUser(用户用户){
返回loadFromUser(user.id);
}

这毫无原因地要复杂得多,只需使用其他解决方案这将是一个非常需要的功能,尤其是在需要使用大量类成员的情况下。遗憾的是,没有这样的支持:(
@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);
}