2016-12-15 36 views
2

我有greenDao和@ToMany关系的问题。当我插入数据库时​​进行会话时,可以轻松获得@ToMany关系。在重新启动我的应用程序后,我的问题发生,正在返回的列表为空。greenDao @ToMany关系不起作用,返回0

在那里我做插入到数据库(我使用rxjava2得到模型)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] 

广场。我一直试图以不同的顺序插入它,但也没有影响。

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 DailyDatadebuger Android Studio

我也试图通过 @ToMany(referencedJoinProperty = “ID”)做@ToMany关系,但结果是一样的。

任何想法为什么@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关系。所以当你插入到数据库时:

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 –