如何只存储原始类型为Long的表使用Room?

时间:2017-08-10 15:12:59

标签: android android-sqlite persistent-storage

我有ID列表,Long类型也是primaryKey,我想存储在DB中,如果我这样存储

 @Dao
public interface UserId {
 @Query("SELECT * FROM ids")
Flowable<List<Long>> allIds();


 @Insert(onConflict = OnConflictStrategy.REPLACE)
 List<Long> insert(List<Long> Ids);}

错误:参数的类型必须是使用@Entity或其集合/数组注释的类。 这意味着我需要一个只有一个字段类型为Long的类?我应该用@Entity

注释

1 个答案:

答案 0 :(得分:1)

@Insert(onConflict = OnConflictStrategy.REPLACE)
List<Long> insert(List<Long> Ids);

Long不是实体。您无法使用@Insert插入Long个对象,部分原因是没有Long值的表格。

您需要:

  • @Insert个实体,或

  • 创建一个@Query方法,使用SQL解释您计划对这些Long值进行的操作

此外,我怀疑您现有的@Query现在或将来都无法使用,因为Room不会知道您期望的Long。如果碰巧在任何实体定义userfavoritestore表中只有一个合适的字段,可能可以工作。但是一旦你有2个以上的整数字段,Room就不知道你想要哪一个。将*中的@Query替换为您要返回的实际列名。