Händische Programmierung eines 1:n-ORM

AndiE

Top Contributor
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:

Java:
class Angestellter {

private int Personalnummer;

private String Name;

private int Abteilungsnummer“

//Kontruktor

//Gebe und Hole-Methoden

}

Und

Java:
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:

Code:
(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:

Code:
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.
 
Zuletzt bearbeitet von einem Moderator:
dann wird es logisch: "select ab from Abteilung ab inner join ab.Mitarbeiterliste an". Habe ich das so richtig verstanden?
 
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.
 

Zurück
Oben