# Objektreferenzen wiederherstellen



## Abraxaskuh (12. Jun 2005)

Hallo Zusammen!

Kann mir jemand Tipps geben, wie ich am besten Objektreferenzen wiederherstelle, nachdem sie in einer Datenbank abgespeichert waren?
Ich habe bisher lediglich gefunden, dass Beziehungen in der Datenbank als Fremdschlüssel gespeichert werden.
Ich habe zum Beispiel eine Klasse, welche Assoziationen zu zwei weiteren Klassen hat. Diese haben wiederum Referenzen zu noch anderen Klassen. :roll: 
Für mich als Anfänger schwierig einen Ansatz zu finden. Habe bisher im Internet leider auch noch keine guten Beispiele dazu gefunden... Oder ich suche an der falschen Stelle  ???:L 

Hoffe es kann jemand helfen, bin zur Zeit ziemlich ratlos...


----------



## Bleiglanz (12. Jun 2005)

in SQL gibts erstmal keine "Objektreferenzen"

a) von Hand: speichere alle Objektinstanzen als Zeilen in die Datenbank (für jede ein Insert) und ersetzte dabei die "Referenzen" durch die entsprechenden Foreignk Keys; beim einlesen dann das ganze rückwärts (select -> daten in ein Objekt -> Fremdschlüssel lesen -> select für den referenzierten Datensatz -> in Objekt lesen -> usw.)

b) nimm einen O/R Mapper a la Hibernate / JDO, die machen genau das für dich


----------



## Abraxaskuh (12. Jun 2005)

Soweit verstanden...

Aber muss ich jetzt beim Start des Programms sämtliche Objekte auslesen, weil alle Objekte miteinander verbunden sind? Oder gibt es auch eine Möglichkeit eine Klasse alleine auszulesen und die referenzierten Objekte später. Und wenn ja, wie vermeide ich, dass ich so Objekte doppelt und dreifach in den Arbeitsspeicher lade? Oder ist das unsinnig so? Wie  managed  man das im allgemeinen?


----------



## Bleiglanz (12. Jun 2005)

nimm Hibernate!

i.A. managed man das gar nicht, sondern arbeitet zeilenorientiert (d.h. man lädt nur immer eine zeile und die anderen bei bedarf)

mach ein private Member für den Fremdchlüssel selbst

und mach einen getter, der ERST BEIM AUFRUF das abhängige Objekt aus der Datenbank holt


----------



## Guest (12. Jun 2005)

Sorry, wenn ich nerve... Aber was ist ein  private Member?
Und Hibernate kann ich leider nicht mehr nehmen, die Datenbank und alles drumherum steht schon...
Uns fehlt halt nur noch die Geschichte mit den Fremdschlüsseln... Aber das ich immer erst beim Aufruf eines direkten Objektes die Fremdschlüssel lade ist schonmal ein guter Tipp. Nur wie vermeide ich es dann Objekte doppelt zu laden?


----------



## Abraxaskuh (12. Jun 2005)

Und noch was... Kann es sein, dass wenn ich eine Liste von Objekten anzeige ich die Objekte gar nicht in den Arbeitsspeicher laden brauche, sondern nur eine Liste der wichtigsten Daten erstelle und erst wenn jemand ein Objekt im GUI anklickt das gesamte Objekt geladen wird?


----------

