房间数据库的独特价值

时间:2019-05-22 10:07:11

标签: android android-room android-database

我正在尝试将会议室数据库集成到我的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();

但是,问题仍然存在,如何获取其他细节?

5 个答案:

答案 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);