2017-12-15 2 views
0

Ich habe 3 Tabellen.Ormlite sauber Abfrage Ergebnis nach Freigabe OpenHelperManager

@DatabaseTable(tableName = "summary") 
public class Summary { 


@DatabaseField(columnName = _ID, generatedId = true) 
private int id; 

@DatabaseField (columnName = OPERATION_NAME) 
private String operation; 

@ForeignCollectionField(columnName = ENTRIES, eager = true) 
private Collection<Entry> entries; 
} 

Zweitens:

@DatabaseTable(tableName = "entry") 
public class Entry implements Parcelable { 

@DatabaseField(columnName = _ID, generatedId = true) 
private int _id; 

@DatabaseField (foreign = true, columnName = SUMMARY, foreignAutoCreate = true) 
private Summary summary; 

@ForeignCollectionField(columnName = PARAMS, eager = true) 
private Collection<Params> params; 
} 

Drittens:

@DatabaseTable(tableName = "params") 
public class Params implements Parcelable { 

@DatabaseField(columnName = _ID, generatedId = true) 
private int _id; 


@DatabaseField (foreign = true, columnName = ENTRY, foreignAutoCreate = true, foreignAutoRefresh = true) 
private Entry entry; 
} 

Ich habe die Abfrage

List<Summary> summaries = new ArrayList<Summary>(); 
summaries = dao.queryForAll(); 

Jedes Element Zusammenfassungen Sammlung Einträge enthält. Jedes Eintragselement enthält Collection-Parameter.

Ich habe die Liste Zusammenfassungen mit Datensätzen, aber nach OpenHelperManager.releaseHelper(); Ich verliere Daten der Sammlung, die Daten aus der dritten Tabelle aus Zusammenfassungen enthält. Ich bekomme IllegalStateException. Warum?

+0

Sie haben das Problem gut eingerichtet, aber Sie haben nur den Code angegeben, der funktioniert. Sie erhalten eine bessere Qualität der Antworten, wenn Sie die Frage bearbeiten, um den Teil des Codes hinzuzufügen, der den angezeigten Fehler anzeigt, idealerweise mit Kommentaren oder anderen Hinweisen, um zu beschreiben, was Sie erwarten und was Sie tun. Re tatsächlich sehen. Als jemand, der mit Java und Android vertraut ist, kann ich nicht genau herausfinden, was Sie mit "Verlieren einer Sammlung" meinen, was Sie gezeigt haben. – lockcmpxchg8b

Antwort

0

Ich habe mein Problem gelöst. Ich muss MaxEagerLevel auf 2 erhöhen (Standard 1).

Legen Sie fest, wie oft die ausländische Sammlung einer eifrigen ausländischen Sammlung erweitert werden soll. Wenn Sie nach A fragen und es eine eifrige fremde Sammlung von Feld B hat, die eine eifrige fremde Sammlung von Feld C hat, dann werden viele Datenbankoperationen immer dann stattfinden, wenn Sie nach A fragen. Standardmäßig ist dieser Wert 1 bedeutet, dass wenn Sie nach A fragen, die Sammlung von B eifrig abgerufen wird, aber jedes der B-Objekte eine faule Sammlung statt einer eifrigen Sammlung von C hat. Sie sollte nur erhöht werden, wenn Sie wissen, was Sie tun.

int maxEagerLevel()