房间数据库独特的价值

Har*_*hah 4 android android-database android-room

我正在尝试将房间数据库集成到我的 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]
Run Code Online (Sandbox Code Playgroud)

我的实体(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;
        }
    }
Run Code Online (Sandbox Code Playgroud)

我的道:

@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();
}
Run Code Online (Sandbox Code Playgroud)

如果我遗漏了什么,请告诉我。

如果我更改List<User>List<String>它可以工作,但如果我们还需要其他详细信息怎么办。

原来的:

// Not working
  @Query("SELECT DISTINCT user_name FROM User")
  List<User> fetchDistinctUser();
Run Code Online (Sandbox Code Playgroud)

更改:

// Working
  @Query("SELECT DISTINCT user_name FROM User")
  List<String> fetchDistinctUser();
Run Code Online (Sandbox Code Playgroud)

但是,问题仍然是如何获取其他详细信息?

Che*_*ari 7

您可以使用解决此问题 Group By

@Query("SELECT user_name FROM User group by userID")
List<User> fetchDistinctUser();
Run Code Online (Sandbox Code Playgroud)

像上面的例子一样,你会得到不同的用户。


Sai*_*aid 2

使用以下属性User

@Query("SELECT DISTINCT name FROM User")
List<String> fetchDistinctUser();
Run Code Online (Sandbox Code Playgroud)