【问题标题】:GreenDAO (Android) - Persist object in multiple tables using one insertGreenDAO (Android) - 使用一次插入将对象持久保存在多个表中
【发布时间】:2016-12-25 10:34:38
【问题描述】:

我有以下 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 --&gt; oneToMany --&gt; Episode --&gt; oneToMany --&gt; Moment

假设我有一个完全填充的 TvShow 对象(称为 tvShow),我正在执行以下操作以将该对象添加到我的数据库中:

final long rowId = daoSession.getTvShowDao().insertOrReplace(tvShow);

这会正确地将 tvShow 对象添加到 TvShow 表中。 然而EpisodeMoment 表根本没有填充。 tvShow 对象有几个情节,每个情节都有几个时刻。我希望其他 2 个表也包含该数据,但它们没有。

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

【问题讨论】:

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


    【解决方案1】:

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

    例如:

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

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

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

    换句话说,您必须单独持久化所有数据。

    希望对你有所帮助。

    【讨论】:

    • 感谢您的回答。这就是我最终使用的方法,但如果有人想出不同的方法,我会留下这个问题。
    • 你能给我建议吗,我的外键有问题,在你的情况下,即使我添加了@ToMany(referencedJoinProperty = "tvShowId"),Episode 也没有 TvShow 的 ID?
    • 只需为该伙伴打开您自己的 SO 问题。我去看看。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-21
    • 1970-01-01
    • 2021-01-10
    • 1970-01-01
    相关资源
    最近更新 更多