# Händische Programmierung eines 1:n-ORM



## AndiE (2. Mrz 2016)

Es seien zwei Tabellen „Angestellter(Personalnummer,Name,Abteilungsnummer)“ und „Abteilung(Abteilungsnummer, Bezeichnung)“. Es besteht eine 1:n-Beziehung und der Eintrag „Abteilungsnummer“ verbindet die beiden Tabellen.

Objektorientiert wäre das in Pseudocode:


```
class Angestellter {

private int Personalnummer;

private String Name;

private int Abteilungsnummer“

//Kontruktor

//Gebe und Hole-Methoden

}
```

Und


```
class Abteilung {

private int Abteilungsnummer;

private string Abteilungsname;

private List<Angestellter> Mitarbeiterliste;

//Konstruktor

//gebe und Hole-Methoden
}
```

Um diese Tabellen in die Klassen zu überführen würde ich :

1.  Einlesen der Tabelle Angestellte in eine Liste AngestelltenListe

2.  Einlesen der Tabelle Abteilung in eine Liste Abteilungsliste

3.  Herstellung der Verknüpfung

Das Einlesen der Tabellen aus dem Resultset ist ja einfach:


```
(Pseudeocode)
…
List Angestelltenliste =new List();
…

while(Datensatz im Resultset) {
   Angestellter A = new Angestellter();
   //Fülle Objekt A mit eingelesenen Eigenschaften.
   Angestelltenliste.add(A);
}
```

Danach habe ich also zwei Listenobjekte von Objekten , wobei Abteilungen ja weniger Objekte als Angestellte hat. Daraus würde ich als Pseudecode schreiben:


```
Angestellter ang;
while(Abteilung abt = Abteilungsliste.getNext()) {
   while(ang=Angestellter.getNext()) {
     if(ang.Abteilungsnummer == abt.Abteilungsnummer) {
       abt.Mitarbeiterliste.add(ang);
     }
     Ang = Angestelltenliste.getTop(); //Zurücksetzen auf Listenanfang
   }
}
```


Mir stellt sich nun die Frage, wie man das mit JPQL vereinfachen kann.


----------



## Joose (2. Mrz 2016)

Indem man mit Hilfe von JPQL keine while-Schleifen mehr schreiben muss welche Objekte erstellen, Daten aus dem ResultSet auf das Objekt schreiben usw.
Da passiert dann alles im Hintergrund. 

1:m Beziehungen können mit der richtigen Annotation abgebildet werden.
Auf Wikipedia gibt es da ein kleines Beispiel: https://en.wikipedia.org/wiki/Java_Persistence_Query_Language


----------



## AndiE (2. Mrz 2016)

dann wird es logisch: "select ab from Abteilung ab inner join ab.Mitarbeiterliste an". Habe ich das so richtig verstanden?


----------



## mrBrown (2. Mrz 2016)

Da dürfte schon "select ab from Abteilung ab" reichen, die Unterobjekte werden dann passend gefüllt.
Über die Annotations ist ja angegeben, wie welche Listen gefüllt werden müssen.


----------

