Alle Objekte von ABAP Objects, also auch die vom Persistenzdienst verwalteten persistenten Objekte persistenter Klassen, leben technisch gesehen immer nur transient im internen Modus eines ABAP-Programms, während die Daten des SAP-Systems persistent auf der Datenbank liegen. Die Persistenz von Objekten wird durch eine so genanntes Mapping zwischen Datenbanktabellen und den Attributen persistenter Klassen erreicht.
Über das Mapping wird eine relationale Datenbanksicht mit einer objektorientierten Sichtweise verbunden. Mapping ist ein wichtiger Bestandteil beim Anlegen persistenter Klassen und wird von einem Mapping Assistant unterstützt, der in den Class Builder integriert ist. Die prinzipielle Vorgehensweise ist wie folgt:
...
1. Erstellung eines Objektmodells und Design der Klassen. Falls vorhandene Datenbanktabellen objektorientiert behandelt werden sollen oder neu zu erstellende Datenbanktabellen dem relationalen Modell folgen, ergibt sich das Objektmodell aus dem relationalen Modell.
2. Definition der einzelnen Klassen im Class Builder, wobei die Eigenschaft Persistente Klasse ausgewählt wird. Wie jeder Klasse, die im Class Builder angelegt wird, wird ihr intern eine global eindeutige Klassen-GUID zugewiesen und es werden automatisch die klassenspezifischen Hilfsklassen der Object Services generiert. Während bei normalen Klassen die Klassen-GUID in der Anwendung keine Rolle spielt, kommt ihr für persistente Klassen eine wichtige Bedeutung zu, da der Persistenzdienst mit dieser Kennung arbeitet.
3. Definition der Persistenzabbildung (Mapping mit dem Mapping Assistant)
...
a. Auswahl einer oder mehrerer Datenbanktabellen, Datenbank-Views oder Strukturen
· Gegebenenfalls müssen im ABAP Dictionary neue Datenbanktabellen, Datenbank-Views oder Strukturen für das Objektmodell angelegt werden. Dies geschieht zur Zeit nicht automatisch.
·
Bei der Persistenzabbildung kann das Mapping auf
drei verschiedene Arten vorgenommen werden. Diese Mappingtypen richten sich
nach den Schlüsseln der Datenbanktabellen bzw. , Datenbank-Views und ihrer
Kennzeichnung. Wir unterscheiden
Mapping über
Business Keys
Mapping über
eine Instanz-GUID
Mapping über
Instanz-GUID und Business Keys
Die Voraussetzung aller drei Mappingtypen sind immer Datenbanktabellen,
Datenbank-Views oder Strukturen des ABAP Dictionary, auf deren Grundlage
Attribute und Methoden der persistenten Klasse und ihres Klassenakteurs
erzeugt werden.
b. Zuordnung aller Spalten der Datenbanktabellen, Datenbank-Views oder Komponenten von Strukturen zu den Attributen der persistenten Klasse. Dabei werden festgelegt:
· der Mappingtyp
· die Wert-Attribute
· die Referenzattribute, die intern aus einer Klassen-GUID und einer Instanz-GUID zusammengesetzt sind und damit den Verweis auf persistente Objekte in der Datenbank erlauben.
Es müssen alle Spalten einer Datenbanktabelle auf Attribute gemappt werden. Wenn Sie nur einen Teil der Spalten über Object Services verwalten wollen, müssen Sie einen Datenbank-View anlegen.
Im einfachsten Fall wird genau eine Datenbanktabelle einer persistenten Klasse zugeordnet (Ein-Tabellen-Mapping). Dann ist zur Laufzeit ein persistentes Objekt der persistenten Klasse mit genau einem Eintrag in dieser Tabelle verknüpft. Der Persistenzdienst sorgt (innerhalb eines internen Modus) für die eineindeutige Verbindung zwischen Tabelleneintrag und Objekt.
Es können mehrere Datenbanktabellen einer persistenten Klasse zugeordnet werden (Mehr-Tabellen-Mapping). Dann ist ein persistentes Objekt dieser Klasse zur Laufzeit mit jeweils einem Eintrag jeder der beteiligten Tabellen verknüpft. Die Schlüssel der beteiligten Tabellen müssen dafür vom gleichen Typ sein. Alle drei Mappingtypen sind auch beim Mehr-Tabellen-Mapping möglich.
Beim Struktur-Mapping wird keine Zuordnung zu Datenbanktabellen oder Datenbank-Views sondern zu Strukturen des ABAP Dictionary durchgeführt. Die Art der persistenten Datenspeicherung muß in diesem Fall also vom Anwendungsentwickler selbst in den entsprechenden Methoden des Klassenakteurs programmiert werden.
Ein Struktur-Mapping ist beispielsweise notwendig, wenn ein persistentes Objekt tabellenartige Attribute enthalten soll. Da Datenbanktabellen nur flache Strukturen haben, ist eine Tabellen-Mapping hier nicht möglich. Auch wenn eine andere persistente Datenablage, wie z.B. Dateien auf dem Applikationsserver, verwendet werden soll, muß das Struktur-Mapping verwendet werden.