【发布时间】:2019-05-22 10:07:11
【问题描述】:
我正在尝试将房间数据库集成到我的 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]
我的实体(Getter 和 Setter 没有在这里复制):
@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<String>,它可以工作,但如果我们还需要其他详细信息怎么办。
原文:
// Not working
@Query("SELECT DISTINCT user_name FROM User")
List<User> fetchDistinctUser();
已更改:
// Working
@Query("SELECT DISTINCT user_name FROM User")
List<String> fetchDistinctUser();
但是,问题仍然存在如何获取其他详细信息?
【问题讨论】:
-
您的查询是正确的。但为什么不工作我不明白。您也可以在插入数据时进行检查。 @Insert(onConflict = OnConflictStrategy.REPLACE) void insertAll(User... users);或 @Insert(onConflict = OnConflictStrategy.IGNORE) void insertAll(User... users);
-
@ShohelRana,谢谢我会试试这个
-
@ShohelRana 如答案中所建议,如果我将 List
更改为 List 它正在工作,但如果我们想要其他详细信息以及 -
如果你没有得到完整的列表对象。您在插入期间重复数据检查。已经对你说过了。然后使用选择查询获取所有数据。你可以用它来替代
标签: android android-room android-database