Je suis nouveau sur Room, et @Relation n'est pas clair pour moi. Si je comprends bien, j'ai des entités par ex. (RSS) ChannelEntity, et le canal a des éléments nommés ItemEntity. Ce sont des classes avec l'annotation @Entity. J'ai aussi un POJO pour "connecter" mes entités. Je veux dire que j'ai à écrire un POJO comme ceci:Bibliothèque Android Persistance Room
public class Channel {
@Embedded
private ChannelEntity channel;
// Link is the primary key in ChannelyEntity
@Relation (parentColumn = "link", entityColumn = "channel_link")
private ArrayList<ItemEntity> items;
// Getters and Setters are here
}
que je n'ai d'écrire une interface dao où je peux obtenir Channel (pas ChannelEntity) comme ceci:
public interface ChannelDao {
@Query("SELECT * FROM channels WHERE link = :link LIMIT 1")
Channel getChannelById(String link);
@Query("SELECT * FROM channels")
ArrayList<Channel> getAllChannels();
}
Avec ces entités , DAOs et POJOs Je peux obtenir des objets Channel qui contiennent une liste d'items avec le lien correspondant (id). Est-ce correct?
Mon autre question concerne le reste. Par exemple. si je souhaite enregistrer une nouvelle chaîne, puis-je ajouter cette déclaration à mon ChannelDao?
@Insert(onConflict = OnConflictStrategy.REPLACE)
void createChannels(Channel... channels);
supprimer
@Delete
void deleteChannels(Channel... channels);
et ainsi de suite. Alors, va-t-il créer et supprimer les ChannelEntities et ItemEntities de l'objet Channel transmis?
Demandez-vous ou avez-vous essayé et cela ne fonctionne pas? Room Persistence Library est nouveau (et alpha) donc pas beaucoup d'utilisateurs Android expérimentés ont eu le temps de jouer avec elle (étant donné qu'il est peu probable d'être utilisé dans la production * *), il est donc préférable de trouver des erreurs concrètes, des échantillons en général; on dirait que vous essayez juste d'obtenir la validation, mais personne n'aura le temps de tester cela. Alors allez-y, essayez-le et signalez les erreurs quand elles se produisent. Et affichez tous vos cours pertinents, ni seulement la moitié d'entre eux. –
"Puis-je ajouter cette instruction à mon ChannelDao?" - AFAIK, non. L'idée derrière '@ Relation', aussi proche que je puisse dire, est de l'utiliser pour remplir un modèle de vue. – CommonsWare
Je ne l'ai pas encore utilisé, au début je voudrais savoir comment je peux persister et le lire à partir de DB avec des objets de la salle qui contient la liste ou d'autres objets. Si j'utilise @ForeignKey, je peux récupérer l'objet avec la liste dans une requête. – user3057944