我正在尝试将会议室数据库集成到我的android应用程序中。 现在,我想从数据库中查询不同的结果,但出现此错误:
error: The columns returned by the query does not have the fields [id] in com.abc.def.model.User even though they are annotated as non-null or primitive.
Columns returned by the query: [user_name]
我的实体(盖特和塞特在这里没有复制):
@Entity
public class User {
@PrimaryKey(autoGenerate = true)
@NonNull
@ColumnInfo(name = "id")
private Integer id;
@ColumnInfo(name = "user_name")
@NonNull
private String name;
@ColumnInfo(name = "email")
private String email;
public User(String name, String email) {
this.name = name;
this.email = email;
}
}
我的道:
@Dao
public interface UserDao {
@Insert
void insertAll(User... users);
// Not working
@Query("SELECT DISTINCT user_name FROM User")
List<User> fetchDistinctUser();
// Working
@Query("SELECT * FROM User")
List<User> fetchAllUser();
}
让我知道我是否想念一些东西。
如果我将List<User>
更改为List<Sttring>
,则可以使用,但是如果我们还想了解其他详细信息怎么办?
原始
:// Not working
@Query("SELECT DISTINCT user_name FROM User")
List<User> fetchDistinctUser();
已更改:
// Working
@Query("SELECT DISTINCT user_name FROM User")
List<String> fetchDistinctUser();
但是,问题仍然存在,如何获取其他细节?
答案 0 :(得分:5)
您可以使用Group By
@Query("SELECT user_name FROM User group by userID")
List<User> fetchDistinctUser();
像上面的示例一样,您将获得不同的用户。
答案 1 :(得分:0)
使用User
中的属性:
@Query("SELECT DISTINCT name FROM User")
List<String> fetchDistinctUser();
答案 2 :(得分:0)
您正在获取一个已经完全不同的孔记录集,因为您的ID是主要的而又不同。
您只需要将id删除为主,或者可以使用不包含id字段的记录集的另一个类。
例如
@api.depends('date_maturity', 'debit', 'credit', 'reconcile_id',
'reconcile_partial_id', 'account_id.reconcile',
'amount_currency', 'reconcile_partial_id.line_partial_ids',
'currency_id')
def _maturity_residual(self):
...
答案 3 :(得分:0)
对于来这里遇到同样问题的任何人,“选择房间中的其他内容”不适用于LiveData。我不知道为什么,但这可能是一个错误。
答案 4 :(得分:0)
如果您想从不同的 user_name 中获得其他详细信息,您可以通过以下方式进行:
第一种方式:
@Query("SELECT * FROM User where user_name in (SELECT DISTINCT user_name FROM User)")
List<User> fetchDistinctUser();
第二种方式:
第一步:首先获取不同的用户名:
@Query("SELECT DISTINCT user_name FROM User")
List<String> fetchDistinctUser();
第 2 步:在您的活动或任何类\函数中获得不同的用户名后,再次将其传递给 Dao 以获取所有数据:
@Query("SELECT * FROM User WHERE user_name LIKE :name")
List<User> fetchAllDataOfDistinctUser(String name);