2017-08-10 6 views
0

Je liste des Ids, le type de Long qui est primaryKey aussi bien, je veux stocker dans DB, si je le stockage comme ceComment stocker uniquement la table avec le type primitif de Long utilisant Room?

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


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

erreur: Type du paramètre doit être une classe annotée avec @Entity ou une collection/tableau de celui-ci. Cela signifie que je dois avoir une classe avec un seul type de champ de Long? que j'annoter avec @Entity

+0

Vous ne pouvez pas "stocker" un "Flowable", au moins pour la façon dont j'utiliserais le verbe "stocker". Veuillez fournir plus de contexte autour de cette ligne de code Java. Où est-ce? Est-ce sur votre classe '@ Dao'? A-t-il une annotation '@ Query'? – CommonsWare

+0

@CommonsWare J'ai mis à jour mon code –

Répondre

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

A Long est pas une entité. Vous ne pouvez pas utiliser @Insert pour insérer des objets Long, en partie parce qu'il n'y a pas de table pour les valeurs Long.

Vous devez soit:

  • @Insert entités réelles ou

  • Créer une méthode @Query, avec SQL qui explique ce que vous envisagez de faire avec ces Long valeurs

En outre, je soupçonne que votre @Query existant ne fonctionnera pas, maintenant ou à l'avenir, comme Room will n ot savoir ce que vous attendez Long. Il peut fonctionner si vous avez un seul champ approprié dans n'importe quelle entité définit la table userfavoritestore. Mais une fois que vous avez 2+ champs entiers, Room ne saura pas lequel vous voulez. Remplacez * dans le @Query avec le nom de colonne réel que vous souhaitez renvoyer.