Я новичок в Room, и @Relation для меня непонятен. Если я правильно понимаю, у меня есть сущности, например. (RSS)ChannelEntity, а в канале есть элементы с именами ItemEntity. Это классы с аннотацией @Entity. У меня также есть POJO для «подключения» моих объектов. Я имею в виду, что я должен написать POJO следующим образом:
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
}
Затем я должен написать интерфейс dao, где я могу получить канал (не ChannelEntity) следующим образом:
public interface ChannelDao {
@Query("SELECT * FROM channels WHERE link = :link LIMIT 1")
Channel getChannelById(String link);
@Query("SELECT * FROM channels")
ArrayList<Channel> getAllChannels();
}
С помощью этих сущностей, DAO и POJO я могу получить объекты канала, которые содержат список элементов с соответствующей ссылкой (идентификатором). Это правильно?
Мой другой вопрос об остальном CRUD. Например. если я хочу сохранить новый канал, могу ли я добавить это утверждение в свой ChannelDao?
@Insert(onConflict = OnConflictStrategy.REPLACE)
void createChannels(Channel... channels);
удалить
@Delete
void deleteChannels(Channel... channels);
и так далее. Так будет ли он создавать и удалять ChannelEntities и ItemEntities из переданного объекта Channel?
@Relation
состоит в том, чтобы использовать его для заполнения модели представления. - person CommonsWare   schedule 18.07.2017@Relation
является конструкцией только для чтения. Когда вы хотите что-то сохранить, AFAIK, вы используете сущности (или пользовательский SQL в@Query
), а не POJO с@Relation
. - person CommonsWare   schedule 18.07.2017