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);

Другими словами, вы должны сохранять все данные отдельно.

Я надеюсь, что это помогло вам.

Другие вопросы по тегам