2016-12-25 1 views
1

Ich habe die folgenden drei Klassen:GreenDAO (Android) - Persist Objekt in mehrere Tabellen mit einer Einlage

1) tvshow

@Entity 
public class TvShow{ 

    @Id 
    private String uuid; 

    private String url; 
    private String title; 
    ... 

    @ToMany(referencedJoinProperty = "tvShowUuid") 
    private List<Episode> episodes; 

2) Folge

@Entity 
public class Episode{ 

    @Id 
    private String uuid; 

    @ToMany(referencedJoinProperty = "episodeUuid") 
    private List<Moment> moments; 

    //FK 
    private String tvShowUuid; 

3) Moment

@Entity 
public class Moment{ 

    @Id 
    private String uuid; 

    ... 

    private String episodeUuid; 

Wie Sie die re ziehung zwischen ihnen ist: TvShow --> oneToMany --> Episode --> oneToMany --> Moment

Unter der Annahme, habe ich eine voll bestückte tvshow Objekt (genannt tvshow), mache ich das folgende, das Objekt zu meiner Datenbank hinzuzufügen:

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

Dies fügt richtig tvshow Objekt die TvShow-Tabelle. , die Episode und Moment Tabellen sind überhaupt nicht bestückt. Das tvShow-Objekt hat mehrere Episoden und jede Episode hat mehrere Momente. Ich habe erwartet, dass die anderen 2 Tabellen auch diese Daten enthalten, aber sie nicht.

Was mache ich falsch? Soll ich jede Episode durchlaufen (und nacheinander durch jeden Moment jeder Episode) und sie stattdessen manuell einfügen? = (

Antwort

0

Vielleicht habe ich mich geirrt, ich hatte das gleiche Problem, aber greenDao ist nicht in der Lage, Kaskadendaten zu halten - Wenn Sie insertOrReplace(tvShow) sagen, wird es keine Liste von Episoden und Liste von Momenten persistieren Sie müssen alle Daten bestehen bleiben separat

. zum Beispiel:

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

UND

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

UND

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

Mit anderen Worten, müssen Sie alle Daten separat bestehen bleiben.

Ich hoffe, dass dies Ihnen geholfen hat.

+1

Danke für Ihre Antwort. Das ist der Ansatz, den ich benutzt habe, aber ich lasse die Frage offen, für den Fall, dass jemand einen anderen Ansatz hat. – Tiago

+0

Kannst du mir einen Ratschlag geben, ich habe ein Problem mit dem Fremdschlüssel, in deinem Fall wird Episode nicht ID von TvShow sein, obwohl ich '@ToMany (refededJoinProperty = "tvShowId") '' hinzugefügt habe? – hogar

+0

Öffnen Sie einfach Ihre eigene SO Frage für diesen Kumpel. Ich werde es mir ansehen. – Tiago

Verwandte Themen