2013-03-08 6 views
6

Ich benutze Ormlite für Android, um eine bestehende Anwendung von Datei in Datenbank-Speicher von Objekten zu konvertieren. Ich habe eine ziemlich komplexe Objektdatenstruktur, die ich in die Datenbank bekommen muss, und zumindest möchte ich nicht zu viel von der Objektstruktur verändern, um dies zu erreichen. In dieser existierenden Struktur habe ich ziemlich viele Ebenen von verschachtelten Fremdobjekten.Warum gibt es kein foreignAutoDelete?

Meine Frage, foreignAutoCreate scheint ziemlich gut automatisch zu arbeiten. Wenn ich ein Objekt in der Datenbank erzeuge, das fremde Objekte enthält, die selbst Fremdobjekte usw. auf vier oder fünf Ebenen haben, füllt die einzige Erstellung für das Master-enthaltende Objekt alle Fremdobjekte auf alle diese Ebenen.

Ich glaube nicht, gibt es eine Möglichkeit, das Master-Objekt zu löschen und Ormite Kaskadierung der Löschungen durch alle Ebenen der enthaltenen Fremdobjekte. Ich möchte bestätigen, dass ich etwas nicht verpasse, und es gibt keine einfachere Lösung für das, was ich mache, nämlich die Verwendung von Triggern, um alles nach einem Löschen aus der Master-Tabelle zu löschen. Ich verstehe, dass Kaskadenlöschungen eine Option sind, obwohl ich es nicht zum Laufen bringen konnte. Aber selbst wenn es funktionierte, wundere ich mich immer noch über das Fehlen einer foreignAutoDelete-Option, da einige Konfigurationen in der Datenbank vorhanden sind und einige in Ormlite möglicherweise Probleme verursachen könnten.

Im Moment habe ich Probleme, eine Update-Option durch alle diese Ebenen von Fremdobjekten abzuschließen. Anfangs erstellte ich das Master-Objekt und es wurden alle Kinder erstellt. Ich würde versuchen, das Master-Objekt zu aktualisieren oder das Master-Objekt zu löschen und dann wieder zu lesen, aber es schien die Kinder nicht zu beeinflussen (sie wurden nicht aktualisiert). Nach dem Hinzufügen von Kaskadenlöten ging ich davon aus, dass das Löschen des Masterobjekts und die Kaskadierung durch seine untergeordneten Elemente und das anschließende Lesen des Masterobjekts die "Aktualisierung" bewirken würde. Allerdings werden die untergeordneten Objekte derzeit nicht hinzugefügt, wenn ich das Masterobjekt lad. Ich denke, es gibt ein Timing-/Transaktionsproblem mit den Lösch-Triggern in untergeordneten Tabellen, die nach dem Zurücksetzen des Master-Objekts auftreten. Das foreignAutoCreate bleibt für alle untergeordneten Objekte aktiviert, sodass ich davon ausgehe, dass sie bei der zweiten Erstellung des Masterobjekts gefüllt werden sollten, nachdem alles aus der Datenbank gelöscht wurde.

Hoffe die Frage macht Sinn und danke im Voraus für alle Antworten.

+0

Warum so lange Frage? Ich brauchte 15 Minuten, um zu verstehen, was Sie wirklich brauchten. Ich denke RobCroll hat eine Lösung gegeben, also muss ich keine geben –

Antwort

7

Fügen Sie einen columnDefinition-Parameter zur DatabaseField-Deklaration des Child-Fremdschlüssels hinzu. In diesem Beispieldokument ist das übergeordnete Dokument. DocumentEntity ist der Name der Klasse, aber der Tabellenname ist definiert als "Dokument"

@DatabaseField(canBeNull = false, foreign = true, index = true, foreignAutoRefresh = true, columnDefinition = "integer references document(id) on delete cascade") 
private DocumentEntity document;