GreenDAO(Android) - 使用一个插入在多个表中持久化对象

时间:2016-12-25 10:34:39

标签: android sqlite one-to-many greendao greendao-generator

我有以下3个班级:

1)TvShow

@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表。 然而 Episode Moment 表根本不会填充。 tvShow对象有几个剧集,每集都有几个片段。我期待其他2个表也包含这些数据,但它们没有。

我做错了什么?我是否应该循环播放每一集(然后循环播放每集的每个片刻)并手动插入它们? =(

1 个答案:

答案 0 :(得分:0)

也许我会错,我遇到了同样的问题,但是greenDao无法持久保存级联数据 - 如果你说insertOrReplace(tvShow)它将不会保留剧集列表和时刻列表。为了执行该操作,您必须单独保留所有数据。

例如:

TvShowDao.save(tvShows)TvShowDao.insertOrUpdate(tvShows);

EpisodesDao.save(episodes)EpisodesDao.save(episodes)

MomentDao.save(moments);MomentDao.save(moments);

换句话说,您必须单独保留所有数据。

我希望这能帮助你。