Я использую ORMLite, пытаясь использовать ForeignCollectionKey, но я получил следующее сообщение об ошибке:ORMLite: Внутренний объект DAO является нулевым
Внутренний объект DAO является нулевым. LazyCollections нельзя использовать, если они были десериализованы.
Я мой объект с именем зоны:
public class Zone implements Serializable {
private static final long serialVersionUID = 1L;
public static final String ZONE_ID = "id";
public static final String ZONE_PARENT_ID = "parentZoneId";
@DatabaseField(generatedId=true)
private int id;
@DatabaseField()
String name;
@DatabaseField(foreign=true, foreignAutoRefresh = true)
Zone parentZone;
@ForeignCollectionField(foreignFieldName = "parentZone", eager = true)
private ForeignCollection<Zone> zoneChild;
public Zone() {
// TODO Auto-generated constructor stub
}
public ForeignCollection<Zone> getZoneChild() {
return zoneChild;
}
public void setZoneChild(ForeignCollection<Zone> zoneChild) {
this.zoneChild = zoneChild;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
В классе я делаю рекурсивный метод, чтобы получить все мои зоны дочерние объекты:
public void getZone(Zone zone, Dao<Zone, Integer> tempZoneDao){
ZoneListEntity zoneEntity = new ZoneListEntity();
zoneEntity.setName(zone.getName());
zoneEntity.setNiveau(0);
zoneEntity.setZone(zone);
mainZoneList.add(zoneEntity);
List<Zone> childList = new ArrayList<Zone>(zone.getZoneChild());
//set rootZone's children as ZoneListEntity
for(Zone currentZone : childList){
ZoneListEntity zoneGroup = new ZoneListEntity();
zoneGroup.setName(currentZone.getName());
zoneGroup.setZone(currentZone);
System.out.println("Zone : "+currentZone.getName());
getZone(currentZone, tempZoneDao);
}
}
Когда я впервые в моем getZone
все идет хорошо. Затем, когда я петля в getZone
сбой приложения пытаются получить доступ к детской зоне:
List<Zone> childList = new ArrayList<Zone>(zone.getZoneChild());
У вас есть какие-нибудь идеи? Является ли моя модель правильной? Thanks
уже пробовал обновление, но не работал ... Я изменил модель своей базы данных, она работает лучше, но без самостоятельной работы. – Max
Помогает ли этот вопрос @Max? http://stackoverflow.com/questions/20802976/how-can-i-fill-the-foreign-collection-manually/20907285#20907285 – Gray
Вызов refresh * does * действительно работает, назовите его на объект, который у вас есть foreignCollection от объекта, который вы отправили через Extras – Odaym