GreenDAO (Android) - сохранить объект в нескольких таблицах, используя одну вставку
У меня есть следующие 3 класса:
1) твшоу
@Entity
public class TvShow{
@Id
private String uuid;
private String url;
private String title;
...
@ToMany(referencedJoinProperty = "tvShowUuid")
private List<Episode> episodes;
2) Эпизод
@Entity
public class Episode{
@Id
private String uuid;
@ToMany(referencedJoinProperty = "episodeUuid")
private List<Moment> moments;
//FK
private String tvShowUuid;
3) Момент
@Entity
public class Moment{
@Id
private String uuid;
...
private String episodeUuid;
Как видите, отношения между ними таковы: TvShow --> oneToMany --> Episode --> oneToMany --> Moment
Предполагая, что у меня есть полностью заполненный объект TvShow (называемый tvShow), я делаю следующее, чтобы добавить этот объект в свою базу данных:
final long rowId = daoSession.getTvShowDao().insertOrReplace(tvShow);
Это правильно добавляет объект tvShow в таблицу TvShow. Однако таблицы Эпизод и Момент НЕ заполнены вообще. Объект tvShow имеет несколько эпизодов, и каждый эпизод имеет несколько моментов. Я ожидал, что другие 2 таблицы также будут содержать эти данные, но они этого не делают.
Что я делаю неправильно? Должен ли я проходить через каждый эпизод (и, в свою очередь, проходить через каждый момент каждого эпизода) и вместо этого вставлять их вручную? знак равно
1 ответ
Может быть, я ошибаюсь, у меня была такая же проблема, но greenDao не может сохранять каскадные данные - если вы говорите insertOrReplace(tvShow)
не будет сохраняться список эпизодов и список моментов. Для этого вам необходимо сохранить все данные отдельно.
Например:
TvShowDao.save(tvShows)
ИЛИ ЖЕ TvShowDao.insertOrUpdate(tvShows);
А ТАКЖЕ
EpisodesDao.save(episodes)
ИЛИ ЖЕ EpisodesDao.save(episodes)
А ТАКЖЕ
MomentDao.save(moments);
ИЛИ ЖЕ MomentDao.save(moments);
Другими словами, вы должны сохранять все данные отдельно.
Я надеюсь, что это помогло вам.