2016-12-15 7 views
2

greenDaoと@ToManyの関係に問題があります。私がDBへの挿入をしているときのドリリングセッションは、簡単に@ToMany関係を取得できます。私の問題は、私がアプリケーションを再起動した後で、返されているリストが空である場合に発生します。greenDao @ToMany関係が動作していない、0を返す

Daily.class

@Entity 
public class Daily extends BaseObservable implements Parcelable { 

@Id(autoincrement = true) 
private Long id; 

@Unique 
private String tag; 

@SerializedName("summary") 
@Expose 
private String summary; 

@SerializedName("icon") 
@Expose 
private String icon; 

@SerializedName("data") 
@Expose 
@ToMany(joinProperties = { 
     @JoinProperty(name = "tag", referencedName = "dataTag")}) 
@OrderBy("id ASC") 
private List<DailyData> data = new ArrayList<DailyData>(); 

DailyData.class

@Entity 
public class DailyData extends BaseObservable implements Parcelable { 

@Id(autoincrement = true) 
private Long id; 

@NotNull private String dataTag; 
... [rest of the code] 

私は(私がモデルを得るためにrxjava2を使用しています)DBへの挿入をやっている場所。私は別の順序でそれを挿入しようとしてきましたが、影響はありません。

public void insertCityToDatabase(City city) { 

    city.setName(cityLatLngList.get(getPosition()).getResult().getName()); 

    city.getDailyWithoutId().setTag(city.getName()); 
    city.getHourlyWithoutId().setTag(city.getName()); 

    for (HourlyData hourlyData : city.getHourlyWithoutId().getHourlyDataWithoutId()) { 
     hourlyData.setDataTag(city.getName()); 
     daoSession.insert(hourlyData); 
    } 
    for (DailyData dailyData : city.getDailyWithoutId().getDataWithoutId()) { 
     dailyData.setDataTag(city.getName()); 
     daoSession.insert(dailyData); 
    } 

    daoSession.insert(city.getHourlyWithoutId()); 
    daoSession.insert(city.getDailyWithoutId()); 
    daoSession.insert(city.getCurrentlyWithoutId()); 

    long id = daoSession.insert(city); 

    eventBus.post(new NewCity(id)); 
} 

は、ここに私のDB Daily and DailyData、私も @ToMany(referencedJoinProperty = "ID")によって@ToMany関係をやって試してみましたdebuger Android Studio

ですが、結果は同じです。

@ToMany関係が機能していない理由は何ですか?

+0

解決しましたか?私は同じ問題を抱えている – user3384194

+0

いいえ、私はgreenDaoからこの問題のRealmに移動することを余儀なくされました。いったん私は新しいプロジェクトでgreenDaoをテストしようとしましたが、それは動作していましたが、なぜここではうまくいかないのか分かりません。 –

答えて

0

私は今問題を解決します。あなたのDaily.class:

@SerializedName("data") 
@Expose 
@ToMany(joinProperties = { 
    @JoinProperty(name = "tag", referencedName = "dataTag")}) 
@OrderBy("id ASC") 
private List<DailyData> data = new ArrayList<DailyData>(); 

とDailyData.class:

@Entity 
public class DailyData extends BaseObservable implements Parcelable { 

@Id(autoincrement = true) 
private Long id; 

@NotNull private String dataTag; 
... [rest of the code] 

これはDaily.classのフィールドタグがDailyData.classでフィールドdataTagとの関係を有することを意味します。あなたがDBに挿入するとき:

for (DailyData dailyData : city.getDailyWithoutId().getDataWithoutId()){ 
    dailyData.setDataTag(city.getTag());// 
    daoSession.insert(dailyData); 
} 

私はこのように問題を解決します。

+0

私はそれをしましたが、「Datazはエンティティではありませんが、クラス(フィールド:データ)の@ToMany関係で参照されています」;;;;;質問:http://stackoverflow.com/questions/44082952/custom-type-in​​-greendao-with-pojo-class –

関連する問題